js中的多维数组转成一维数组

只能将二维转一维:

 第1种:使用reduce和concat组合方法:

var arr =  [[1,2,[3,11,22,[222,99,100]]],[4,5,6],[7,8,9]];
var newArr = arr.reduce(function(pre,curr,index,array){
    return pre.concat(curr);
})    
console.log(newArr)//[1, 2, 3, 4, 5, 6, 7, 8, 9]
 

//VM676:5 (9) [1, 2, Array(4), 4, 5, 6, 7, 8, 9]

第2种:遍历数组,将每个值放到一个空数组中:

var arr = [[1,2,[3,11,22,[222,99,100]]],[4,5,6],[7,8,9]];
var newArr = [];
for (var i = 0;i<arr.length;i++){
    for(var j=0;j<arr[i].length;j++){
        newArr.push(arr[i][j]);
    }
}   
console.log(newArr)//[1, 2, 3, 4, 5, 6, 7, 8, 9]

//VM687:8 (9) [1, 2, Array(4), 4, 5, 6, 7, 8, 9]

第3种:使用apply结合concat,缺点是只能将二维转一维,多维数组则不对了。

const arr = [1,[2,3],[4,5]];
console.log([].concat.apply([],arr));
//VM96:2 (5) [1, 2, 3, 4, 5]

 

const arr2 = [1,[2,[[3,4],5],6]];
console.log([].concat.apply([],arr2));
//VM114:2 (4) [1, 2, Array(2), 6]

多维(二维以上也能转化):

第1种:先转化为字符串,再将字符串转化为数组

var arr = [[1,2,[3,11,22,[222,99,100]]],[4,5,6],[7,8,9]];
var newArr1 = arr.join(",").split(",");
 var newArr2 = arr.toString().split(",");    //["1", "2", "3", "4", "5", "6", "7", "8", "9"]

console.log(newArr2)
//VM661:5 (14) ["1", "2", "3", "11", "22", "222", "99", "100", "4", "5", "6", "7", "8", "9"]

第2种:使用数组map()方法,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

var arr = [1,[2,[[3,4],5],6]];
function unid(arr){
        var arr1 = (arr + '').split(',');//将数组转字符串后再以逗号分隔转为数组
        var arr2 = arr1.map(function(x){
            return Number(x);
        });
        return arr2;
}
console.log(unid(arr));
//VM62:9 (6) [1, 2, 3, 4, 5, 6]

第3种:使用递归

var arr = [1,[2,[[3,4],5],6]];
var newArr = [];
    
function fun(arr){
        for(var i=0;i<arr.length;i++){
            if(Array.isArray(arr[i])){
                fun(arr[i]);
            }else{
                newArr.push(arr[i]);
            }
        }
    }
fun(arr);
console.log(newArr);//[1, 2, 3, 4, 5, 6]
//VM71:14 (6) [1, 2, 3, 4, 5, 6]

第4种:使用 reduce+递归

var arr = [1,[2,[[3,4],5],6]];
    const flatten = arr => arr.reduce(
            (acc,val) => acc.concat(Array.isArray(val)? flatten(val):val),[]
    )
    console.log(flatten(arr));//[1, 2, 3, 4, 5, 6]
//VM85:6 (6) [1, 2, 3, 4, 5, 6]

第5种:使用while循环

var myArray = [[1, 2],[3, 4, [5,22,33,[111,123,321]]], [6, 7, 8, 9]];
function flatten(arr) {
      while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
        //arr = Array.prototype.concat.apply([],arr);
      }
      return arr;
    }
  flatten(myArray);
 
 
//(14) [1, 2, 3, 4, 5, 22, 33, 111, 123, 321, 6, 7, 8, 9]

猜你喜欢

转载自blog.csdn.net/qq_22182989/article/details/129054199
今日推荐