//原数组
let arr= [1,[2,[3,4,[{a:5},'6']],7]];
1. 使用ES6中的Array.prototype.flat方法
arr.flat(Infinity);
2. 使用reduce的方式
function arrFlat(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? arrFlat(cur) : cur);
}, [])
}
3. 使用递归加循环的方式
function arrFlat(arr) {
let result = [];
arr.map((item, index) => {
if (Array.isArray(item)) {
result = result.concat(arrFlat(item));
} else {
result.push(item);
}
})
return result;
}
或者
let result = [];
function arrFlat(arr){
for(const key of arr){
if(Array.isArray(key)){
return arrFlat(key);
}else{
result.push(key);
}
}
}
4. 将数组先变成字符串,再复原 toString()
(只适用于数组元素全是String类型或Number类型)
function arrFlat(arr) {
return arr.toString().split(',').map(item=>+item);
}