js 实现数组扁平化
codinglin 2023/1/30 javascript
# js 实现数组扁平化
# ES6 flat
function flatten(arr) {
return arr.flat(Infinity);
}
# toString
function flatten(arr) {
return arr
.toString()
.split(",")
.map((item) => parseFloat(item));
}
# 循环递归
function flatten(arr) {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flatten(arr[i]));
} else {
res.push(arr[i]);
}
}
return res;
}
# 巧用 reduce
const flatten = (arr, deep = 1) => {
if (deep <= 0) return arr;
return arr.reduce(
(res, curr) =>
res.concat(Array.isArray(curr) ? flatten(curr, deep - 1) : curr),
[]
);
};
# 使用堆栈 stack
function flatten(arr) {
const stack = [...arr];
const res = [];
while (stack.length) {
// 使用 pop 从 stack 中取出并移除值
const next = stack.pop();
if (Array.isArray(next)) {
// 使用 push 送回内层数组中的元素,不会改动原始输入
stack.push(...next);
} else {
res.push(next);
}
}
// 反转恢复原数组的顺序
return res.reverse();
}
# while 循环 + some 方法
function flatten(arr) {
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}