JS实现数组扁平化
- ES6 的 Array.prototype.flat()
具体说明:
- 默认情况下,flat() 会将数组扁平化 一层 嵌套。
- 可以传一个参数 depth,表示扁平化的深度,默认是 1。
举例:
const arr = [1, 2, [3, 4]];
console.log(arr.flat()); // 输出: [1, 2, 3, 4]const arr2 = [1, 2, [3, 4, [5, 6]]];
console.log(arr2.flat()); // 默认一层扁平化,输出: [1, 2, 3, 4, [5, 6]]
console.log(arr2.flat(2)); // 扁平化两层,输出: [1, 2, 3, 4, 5, 6]
如果想完全展开所有层,可以用 Infinity 作为参数:
console.log(arr2.flat(Infinity)); // 展开所有嵌套层
- ES6 之前的写法(递归实现)
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;
}// 测试
const arr = [1, [2, [3, 4], 5], 6];
console.log(flatten(arr)); // [1, 2, 3, 4, 5, 6]
- ES6 及之后的写法(用 reduce 和扩展运算符)
const flatten = (arr) => arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);// 测试
const arr = [1, [2, [3, 4], 5], 6];
console.log(flatten(arr)); // [1, 2, 3, 4, 5, 6]