数组扁平化flat
多维数组 => 一维数组
let ary = [1, [2, [3, [4, 5]]], 6]; // -> [1, 2, 3, 4, 5, 6]
let str = JSON.stringify(ary);
# es6 的 flat 方法
arr = arr.flat(Infinity);
# replace + split
arr = String(arr)
.replace(/(\[|\])/g, "")
.split(",");
# replace + JSON.parse
str = String(arr).replace(/(\[|\])/g, "");
str = "[" + str + "]";
str = JSON.parse(str);
# 普通递归
let result = [];
let rec = (arr) => {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
rec(arr[i]);
} else {
result.push(arr[i]);
}
}
};
rec(arr);
var a = [1, [2, [3, 4, 5]]];
function flatten(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
flatten(a); // [1, 2, 3, 4,5]
# 利用 reduce 函数迭代
concat 既可以接数组,又可以接对象
function flatten(ary) {
return ary.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
}, []);
}
let ary = [1, 2, [3, 4], [5, [6, 7]]];
console.log(flatten(ary));
# 扩展运算符
我们先用数组的 some 方法把数组中仍然是数组的项过滤出来,然后执行 concat 操作,利用 ES6 的展开运算符,将其拼接到原数组中,最后返回原数组
//只要有一个元素有数组,那么循环继续
while (ary.some(Array.isArray)) {
ary = [].concat(...ary);
}
# 参考链接
编辑 (opens new window)
上次更新: 2024/11/29, 10:10:04
← 继承 new操作符做了什么→