es6提供的新方法flat(depth)
参数为降低维数
实现原理:
遍历数组,并判断内部的子元素是否也是数组,如果是数组则继续拆(使用到递归和闭包),若不是则直接放入预先创建的新数组
使用方法:
let a = [1,[2,3,[4,[5]]]];
a.flat(Infinity); // [1,2,3,4,5] 当参数为Infinity 会直接扁平化为一维数组
reduce
function flattening(arr) {
return arr.reduce((ret, item)=>{
return ret.concat(Array.isArray(item) ? flattening(item) : item)
},[])
}
for循环
function flattening(arr) {
var ret = [], len = arr.length;
for(let i = 0, i < len; i++) {
if (Array.isArray(arr[i])) {
ret = ret.concat(flattening(arr[i]));
} else {
ret.push(arr[i]);
}
}
return ret;
ES6展开运算符(…)
function flattening(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}