Mark24
记录灵感、技术、思考
JavaScript编程之手写扁平函数(flat)
数组扁平化(flat)的几种方法
- 递归
function flat(arr) {
let result = []
function make_flat(arr) {
if (Array.isArray(arr)) {
for(let i=0;i<arr.length;i++) {
if(Array.isArray(arr[i])) {
make_flat(arr[i])
} else {
result.push(arr[i])
}
}
} else {
result.push(arr)
}
}
make_flat(arr)
return result
}
const raw = [1,[1,2,[8,9]],3,4]
console.log('--raw--')
console.log(raw)
const ans = flat(raw)
console.log('---ans--')
console.log(ans)
- reduce实现flat
function flat(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
}, [])
}
const raw = [1, 2, [3, 4], [5, [6, 7]]]
console.log(flat(raw))
// --raw--
// [ 1, [ 1, 2, [ 8, 9 ] ], 3, 4 ]
// ---ans--
// [ 1, 1, 2, 8, 9, 3, 4 ]
- 扩展运算符
function flat(arr) {
while (arr.some(Array.isArray)) {
arr = [].concat(...arr)
}
return arr
}