js数组降维

2019-04-05  本文已影响0人  acsamson

二维数组降一维

先看代码:

推荐直接使用apply()数组中的每一个元素(还是数组,二维数组的第二维)会被作为参数依次传入到concat中,等同于[].concat([0,0,1],[2,3,3],[4,4,5])

// 方法一
var arr = [[0,0,1],[2,3,3],[4,4,5]];
console.log([].concat.apply([], arr)); // ==> [0, 0, 1, 2, 3, 3, 4, 4, 5]

// 方法二: 但是会转为字符串, 但是该方法适用于多维数组降维一维
var arr = [[0,0,1],[2,3,3],[4,4,5]];
arr.join(); // ==> "0,0,1,2,3,3,4,4,5"
console.log(arr.join().split(','));

注意这里的concat没有括号, 如果要用到有()的concat就要可以写成如下:

var arr = [[0,0,1],[2,3,3],[4,4,5]];
var newArr = [];
for(var i = 0; i < arr.length; i++){
    newArr = newArr.concat(arr[i]);
}
console.log(newArr); // ==> [0, 0, 1, 2, 3, 3, 4, 4, 5]

并且该方法不适用于多维数组, 因为如下:

var arr1 = [1,[2,[[3,4],5],6]];
console.log([].concat.apply([], arr1)); // ==> [1, 2, Array(2), 6]

多维数组降维一维数组

先看代码:

// 和二维数组有一个通用方法就是用, join, 会转为字符串
var arr = [1,[2,[[3,4],5],6]];
arr.join() // ==> "1,2,3,4,5,6"
console.log(arr.join().split(',')); 

当然也可以新建一个空的数组然后放进去, 是一种递归的方法

var arr = [1,[2,[[3,4],5],6]];
var newArr = [];

function fu(arr){
    for(var i=0;i<arr.length;i++){
        // 递归判断是不是数组, 是的话就递归处理
        if(Array.isArray(arr[i])){
            fu(arr[i]);
        }else{
            newArr.push(arr[i]);
        }
    }
}
fu(arr);
console.log(newArr);//[1, 2, 3, 4, 5, 6]
上一篇下一篇

猜你喜欢

热点阅读