二维数组降维
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[i]; 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[i])); } 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]