js数组扁平化 -flatten

数组扁平化(降维过程,多维数组经过扁平化变成一维数组)。

方法有很多,下面只列举几种

方法一:

ES6的 arr.flat(Infinity)方法会递归到指定深度将所有子数组连接,并返回一个新数组, depth指定嵌套数组中的结构深度,默认值为1,不管多少层则可以用Infinity关键字作为参数。

 //数组扁平化
 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]];
 console.log(arr.flat(Infinity)) //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]

  

方法二:

递归实现

//数组扁平化
 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]];
 //①递归实现
let result = [];
let flatten = function(ary) {
for(let i = 0; i < ary.length; i++){
let item = ary[i];
if (Array.isArray(ary[i])){
flatten(item);
} else {
result.push(item);
}
}
return result
}
console.log('递归实现---',flatten(arr))  //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]

 

方法三:

扩展运算符

//数组扁平化
 let arr = ['a', 2, [3, 'b', 5, [6, 7], 8], 9, 10, [11, [12, 13]]];
 //利用扩展运算符
function flatten(arr) {
    var arr;
    while (arr.some(v => Array.isArray(v))) {  //arr.some() 其中存在一个满足条件的,就会返回true,都不满足返回false
        arr = [].concat(...arr);
    }
    console.log(arr)
    return arr;
}
console.log('扩展运算符---',flatten(arr))  //["a", 2, 3, "b", 5, 6, 7, 8, 9, 10, 11, 12, 13]

  

   

posted @ 2020-10-16 10:27  北巷听雨  阅读(817)  评论(0编辑  收藏  举报
返回顶端