1.递归
function flat(arr){
var res =[];
for (var i=0;i<arr.length;i++){
if (Array.isArray(arr[i])){
res=res.concat(flat(arr[i]));
}
else{
res.push(arr[i])
}
}
return res
}
test:
2.toString
如果数组的元素都是数字,那么我们可以考虑使用 toString 方法,因为: toString会将数组中的数以逗号形式结合起来。
[1,2,[3,4,[5,6]],8].toString()
"1,2,3,4,5,6,8"
so...
function flat(arr) {
return arr.toString().split(",").map((item) => {
return +item
});
}
test:
flat(arr)
[1, 2, 3, 4, 5, 6, 8]
3.reduce
function flat(arr){
return arr.reduce((pre, item) => {
console.log(item);
return pre.concat(Array.isArray(item) ? flat(item) : item);
}, [])
}
test:
4.es6
function flat(arr){
while(arr.some((item)=>{ return Array.isArray(item)})){
arr = [].concat(...arr)
}
return arr;
}
flat(arr)
[1, 2, 3, 4]
由于扩展运算符一次只能展开一层数组:
var arr = [1, [2, [3, 4]]];
console.log([].concat(...arr)); // [1, 2, [3, 4]]
因此考虑只要数组中还有数组,就使用扩展运算符展开一次。
参考文档:
http://blog.csdn.net/crystal6918/article/details/77130948