什么是数组扁平化
数组扁平化是指将多维嵌套的数组转换为一维数组的操作。当数组中包含嵌套的子数组时,扁平化操作会将子数组的元素提取出来,形成一个新的一维数组。
例如:const nestedArray = [1, [2, 3], [4, [5, 6]]];
通过数组扁平化,我们可以将它转换为一维数组:const flattenedArray = [1, 2, 3, 4, 5, 6];
常用数组扁平化的方式
- 使用递归实现数组扁平化:
function flattenArrayRecursive(arr) { let result = []; arr.forEach(item => { if (Array.isArray(item)) { result = result.concat(flattenArrayRecursive(item)); } else { result.push(item); } }); return result; } const arr = [1, [2, 3, [4, 5]], 6]; const flattened = flattenArrayRecursive(arr); console.log(flattened); // 输出: [1, 2, 3, 4, 5, 6]
通过递归地遍历数组中的每个元素,如果元素是数组,则进行递归调用,直到遍历完所有的 嵌套数组。
- 使用
Array.prototype.flat()
方法:const arr = [1, [2, 3, [4, 5]], 6]; const flattened = arr.flat(Infinity); console.log(flattened); // 输出: [1, 2, 3, 4, 5, 6]
flat()
方法可将数组扁平化到指定的深度,默认为1。为了完全扁平化数组,我们传递Infinity
作为参数,以处理任意深度的嵌套数组。 - 使用
Array.prototype.reduce()
和递归实现数组扁平化:function flattenArrayReduce(arr) { return arr.reduce((result, item) => { return result.concat(Array.isArray(item) ? flattenArrayReduce(item) : item); }, []); } const arr = [1, [2, 3, [4, 5]], 6]; const flattened = flattenArrayReduce(arr); console.log(flattened); // 输出: [1, 2, 3, 4, 5, 6]
在这种方法中,我们使用
reduce()
方法遍历数组,并根据每个元素的类型执行不同的操作。如果元素是数组,则进行递归调用以扁平化内部数组;否则,直接将元素添加到结果数组中。