//输入
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
//输出
[1,2,3,4,5,6,7,8,9,10,11,12]
复制代码
下降N个维度数组
function flat(arr){
if(Object.prototype.toString.call(arr) != "[object Array]"){return false};
let res = [];
for(var i=0;i<arr.length;i++){
if(arr[i] instanceof Array){
res = res.concat(flat(arr[i]))
}else{
res.push(arr[i])
}
}
return res;
};
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
flat(arr);
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
复制代码
...扩展运算符,只适合下降一个维度。app
function flat(arr){
if(Object.prototype.toString.call(arr) != "[object Array]"){return false};
let res=[];
arr.map(item=>{
if(item instanceof Array){
res.push(...item);//展开数组[11,12] 为11,12
}else{
res.push(item)
}
});
return res;
};
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
flat(arr);
//[1, 2, 3, 4, 5, Array(3), 9, 10, 11, 12]
复制代码
下降N个维度ui
function flat(arr){
if(Object.prototype.toString.call(arr) != "[object Array]"){return false};
let res=[];
arr.map(item=>{
if(item instanceof Array){
res.push(...flat(item));
}else{
res.push(item)
}
});
return res;
};
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
flat(arr);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
复制代码
下降N个维度spa
function flat(arr){
if(Object.prototype.toString.call(arr) != "[object Array]"){return false};
let res = arr.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur) ? flat(cur) : cur)
},[])
return res;
};
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
flat(arr);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
复制代码
reduce内部也可这么写prototype
[...a,...b] 其做用至关于a.concat(b),这种用法更加直观明了code
if(!Array.isArray(cur)){
return [...prev,cur];
}else{
return [...prev,...flat(cur)]
}
复制代码
toString可直接去除掉中括号递归
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
var arr1 = arr.toString().split(',').map((val)=>{
return parseInt(val)
});
console.log(arr1);
//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
//思路
[1,2,[3,4,5,[6,7,8],9],10,[11,12]].toString().split(",")
// ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
[1,2,[3,4,5,[6,7,8],9],10,[11,12]].toString()
//"1,2,3,4,5,6,7,8,9,10,11,12"
复制代码
参数为层数(默认一层)索引
[1,2,[3]].flat()
// [1, 2, 3]
[1,2,[3,[4]]].flat(2)
// [1, 2, 3, 4]
复制代码
function flat(arr){
while(arr.some(item => Array.isArray(item))){
arr = [].concat.apply([],arr);
}
return arr;
}
var arr = [1,2,[3,4,5,[6,7,8],9],10,[11,12]];
flat(arr);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
复制代码