// 法一:递归
function flatter(arr) {
if (!arr.length) return;
return arr.reduce((prev, cur) => Array.isArray(cur) ? [...prev, ...flatter(cur)] : [...prev, cur], [])
}
/*
法二:迭代
迭代思想:寻找终止条件(如:数组项只要有数组,就一直 while 循环)
*/
function flatter(arr) {
if (!arr.length) return
while(arr.some((item) => Array.isArray(item))) {
// console.log(arr)
// 重点
// var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
// 参数:value | value[];数组或值
arr = [].concat(...arr)
}
return arr
}
// 法三:ES6 flat 或 flatMap。
// 嵌套数组.flat(Infinity)
var arr = [1, [2, [3, 4, [5]]]]
flatter(arr) // [1, 2, 3, 4, 5]