1,递归
function flattenDeep(arr){
let deepArr = []
arr.forEach(element => {
if(Array.isArray(element)){
deepArr = deepArr.concat(flattenDeep(element))
}else{
deepArr.push(element)
}
});
return deepArr
}
console.log(flattenDeep([1,[2,3,[4,5]]])) //[ 1, 2, 3, 4, 5 ]
2,map方法
function flattenDeep2(arr){
//map方法确保得到的是一维数组。cancat可以合并一维数组
return [].concat(...arr.map(item => Array.isArray(item) ? flattenDeep2(item) : item))
}
console.log(flattenDeep([1,[2,3,[4,5],7],[2,3]]))
3,简单数据处理。如果原数组中有字符串类型,最终也会转换成数值类型。
const flattenDeep3 = (data) => data.toString().split(',').map(Number)
flattenDeep3([1, [2, [3, [4]], 5]]) // [ 1, 2, 3, 4, 5 ]
console.log([1, [2, [3, [4]], 5]].toString()) // 1 2 3 4 5
console.log([1, [2, [3, [4]], 5]].toString().split(',')) //[ '1', '2', '3', '4', '5' ]
4,Array.protoType.flat() 方法会递归到指定深度将所有子数组连接,并返回一个新数组.
function flattenDeep4(arr, deepLength) {
return arr.flat(deepLength)
}
console.log(flattenDeep4([1, [2, [3, [4]], 5]], 3));