flat 拍平数组
forEach + 递归
Array.prototype.flat = function (dep = 1) {
const _array = this;
const array = [];
_array.forEach(item => {
if (Array.isArray(item) && dep >= 1) {
array.push(...item.flat(dep - 1));
} else {
array.push(item);
}
});
return array;
};
const animals = ['🐷', ['🐶', '🐂'], ['🐎', ['🐑', ['🐲']], '🐛']];
console.log(animals.flat());
console.log(animals.flat(1));
console.log(animals.flat(2));
console.log(animals.flat(3));
reduce
Array.prototype.flat = function (dep = 1) {
const _array = this;
const array = [];
return _array.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) && dep-- >= 1 ? cur.flat(dep) : cur);
}, []);
};
console.log(animals.flat());
console.log(animals.flat(1));
console.log(animals.flat(2));
console.log(animals.flat(3));