以一个三维数组[1, 2, [3, 4, [5, 6, 7]]]为例,实现扁平化:
第一种方式:递归
let arr = [1, 2, [3, 4, [5, 6, 7]]]
function flattern(arr) {
var res = [];
arr.map(item => {
if (Array.isArray(item)) {
res = res.concat(flattern(item))
} else {
res.push(item)
}
})
return res
}
console.log(flattern(arr)) // [1, 2, 3, 4, 5, 6, 7]
第二种: reduce
let arr = [1, 2, [3, 4, [5, 6, 7]]]
const newArr = function (arr) {
return arr.reduce((result, item) => result.concat(Array.isArray(item) ? newArr(item) : item), [])
}
console.log(newArr(arr)) // [1, 2, 3, 4, 5, 6, 7]
第三种: toString() 和 split
let arr = [1, 2, [3, 4, [5, 6, 7]]]
function flattern(arr) {
console.log(arr.toString()) // 1,2,3,4,5,6,7
console.log(arr.toString().split(',')) // ["1", "2", "3", "4", "5", "6", "7"]
return arr.toString().split(',').map(function (item) {
return Number(item)
})
}
console.log(flattern(arr)) // [1, 2, 3, 4, 5, 6, 7]
第四种: join()和split
let arr = [1, 2, [3, 4, [5, 6, 7]]]
function flattern(arr) {
console.log(arr.join()) // 1,2,3,4,5,6,7
console.log(arr.join().split(',')) // ["1", "2", "3", "4", "5", "6", "7"]
return arr.join().split(',').map(function (item) {
return Number(item)
})
}
console.log(flattern(arr)) // [1, 2, 3, 4, 5, 6, 7]
第五种: flat()
let arr = [1, 2, [3, 4, [5, 6, 7]]]
console.log(arr.flat(2)) // [1, 2, 3, 4, 5, 6, 7]
关于flat的内容,后续将补充