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]