记录一下实现flat方法的过程
flat实现的方式有很多种,这里只是记录一下其中的2种思路。
Array.prototype.flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回
递归实现
function flat(arr, depth) {
if (depth == undefined) {
depth = 1;
};
if (depth > 0) {
return arr.reduce((total, item) => {
return total.concat(Array.isArray(item) ? flat(item, depth - 1) : item)
}, []);
} else {
return arr;
};
};
// const flatArr = flat([1,2,3,[4,[5,[6]]]], 1);
// console.log(flatArr); // [1, 2, 3, 4, Array(2)]
不使用递归
function flat(arr = [], depth) {
if (depth == undefined) {
depth = 1;
};
while(arr.some(item => (Array.isArray(item) && depth > 0))) {
// ...arr每次只能展开一层
arr = [].concat(...arr);
// 限制层级
depth--;
}
return arr;
};
// const flatArr = flat([1,2,3,[4,[5,[6]]]], Infinity)
// console.log(flatArr) // [1, 2, 3, 4, 5, 6]