数组扁平化
扁平化数组:将一个多维数组变为一维数组;
核心思想:遍历数组arr,如果遍历的元素还是数组就递归遍历,直到不为数组,就进行concat。
递归
function flatArray(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatArray(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
var arr = [1, 3, [[5, [2]]], [2, 3, [4, 5]]]
console.log(flatArray(arr))ES6 flat
function flatArray(arr) {
return arr.flat(Infinity);
}
var arr = [1, 3, [[5, [2]]], [2, 3, [4, 5]]]
console.log(flatArray(arr))flat()默认只拉平一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。PS:flat有兼容问题
迭代器
function* iterArr(arr) { //迭代器返回一个迭代器对象
if (Array.isArray(arr)) { // 内节点
for(let i=0; i < arr.length; i++) {
yield* iterArr(arr[i]); // (*)递归
}
} else { // 离开
yield arr;
}
}
// 使用 for-of 遍历:
var arr = ['a', ['b', 'c'], ['d', 'e']];
for(var x of iterArr(arr)) {
console.log(x); // a b c d e
}
// 或者直接将迭代器展开:
var arr = [ 'a', ['b',[ 'c', ['d', 'e']]]];
var gen = iterArr(arr);
arr = [...gen]; // ["a", "b", "c", "d", "e"]来源
数组扁平化
https://blog.fullsize.cn/2021/04/13/notion/shu-zu-bian-ping-hua/