二维数组降维
1.使用 for 循环降维/扁平化
var arr = [1, 2, [3, 4], [5, 6, 7]];
var i, j, val, result = [];
for (i = 0; i < arr.length; i++) {
val = arr;
if (Array.isArray(val)) {
for (j = 0; j < val.length; j++) {
result.push(val[j]);
}
} else {
result.push(val);
}
}
console.log(result);
// > [1, 2, 3, 4, 5, 6, 7]
2.结合 concat()、 apply() 方法降维/扁平化
var arr = [1, 2, [3, 4], [5, 6, 7]];
var result;
result = [].concat.apply([], arr);
console.log(result);
// > [1, 2, 3, 4, 5, 6, 7]
3.结合 concat()方法和 ES6 扩展运算符 (…) 降维/扁平化
var arr = [1, 2, [3, 4], [5, 6, 7]];
var result;
result = [].concat(...arr);
console.log(result);
// > [1, 2, 3, 4, 5, 6, 7]
多维数组降维/扁平化
4.数组降维/扁平化函数递归执行:
var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10, [11, 12]]]]]];
function flatArray(arr) {
if (!Array.isArray(arr)) {
return arr;
}
var i, result = [];
for (i = 0; i < arr.length; i++) {
result = result.concat(flatArray(arr));
}
return result;
}
console.log(flatArray(arr));
或
var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10, [11, 12]]]]]];
function flatArray(arr) {
if (!Array.isArray(arr)) {
return arr;
}
return arr.reduce((result, val)=>{
return result.concat(flatArray(val));
}, [])
}
console.log(flatArray(arr));
// > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
5.使用 ECMAScript 2019 flat() 方法降维/扁平化
var arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10, [11, 12]]]]]];
console.log(arr.flat(Infinity));
// > [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|