法1:朴质的递归实现
遍历数组的每一项,如果每一项依然是数组,就继续调用递归方法;如果是基本数据类型,就添加到结果数组里面
const a = [1, [2, [3, [4, 5]]]];
const flatten = (arr) => {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
};
console.log(flatten(a));
法2:reduce
const flatten = (arr) => {
return arr.reduce((prev,next)=>{
return prev.concat(Array.isArray(next)?flatten(next):next)
},[]);
};
console.log(flatten(a));
法3:扩展运算符
const flatten = (arr) => {
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr);
}
return arr;
};
console.log(flatten(a));
法4:arr.toString.split(‘,’)
- 由于数组会默认带一个 toString的方法,所以可以把数组直接转换成逗号分隔的字符串
- 然后再用 split方法把字符串重新转换为数组,如下面的代码所示。
const flatten = (arr) => {
return arr.toString().split(',')
};
console.log(flatten(a));