盘点JS实现数组扁平化的五种方法
const _flat = (arr) => {
if (!Array.isArray(arr)) return arr;
return arr.flat(Infinity);
};
const __flat = (arr) => {
if (!Array.isArray(arr)) return arr;
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
newArr = newArr.concat(__flat(arr[i]));
} else {
newArr.push(arr[i]);
}
}
return newArr;
};
const ___flat = (arr) => {
if (!Array.isArray(arr)) return arr;
return arr.reduce(
(prev, next) =>
prev.concat(Array.isArray(next) ? ___flat(next) : next),
[]
);
};
const ____flat = (arr) => {
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
};
const _____flat = (arr) => {
return arr.toString().split(',').map(item => Number(item));
};
手动实现flat函数
const flat = (arr, depth) => {
if (!Array.isArray(arr) || depth <= 0) return arr;
return arr.reduce((pre, cur) =>
pre.concat(Array.isArray(cur) ? flat(cur, depth - 1) : cur),
[]
);
};