📅  最后修改于: 2023-12-03 15:01:42.071000             🧑  作者: Mango
在JavaScript中合并多维数组是一个非常常见的任务,但是由于数组的多样性和嵌套性,需要使用不同的方法和技巧来实现。本文将介绍几种常见的方法来合并多维数组。
concat()
方法可以将两个或多个数组合并成一个新数组,返回新数组,原数组不会被修改。对于多维数组来说,可以通过多次使用concat()
方法来实现多维数组的合并。
// 示例1:合并一维数组
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const newArr1 = arr1.concat(arr2); // [1, 2, 3, 4, 5, 6]
// 示例2:合并多维数组
const arr3 = [1, 2, 3];
const arr4 = [4, 5, [6, 7]];
const newArr2 = arr3.concat(arr4); // [1, 2, 3, 4, 5, [6, 7]]
可以看到,使用concat()
方法合并多维数组时,只有第一层会被合并,其余层将被认为是嵌套子数组。
flat()
方法可以将多维数组变成一维数组,可以选择传入一个数字来指定展开的层数,如果不传则默认展开所有层。可以在展开后使用concat()
方法来合并数组。
// 示例1:将二维数组展开为一维数组
const arr1 = [1, [2, 3], [4, [5, 6]]];
const flatArr1 = arr1.flat(); // [1, 2, 3, 4, [5, 6]]
const newArr1 = flatArr1.concat(arr1.flat(2)); // [1, 2, 3, 4, 5, 6]
// 示例2:将三维数组展开为一维数组
const arr2 = [1, [2, [3, 4]], [5, 6]];
const flatArr2 = arr2.flat(Infinity); // [1, 2, 3, 4, 5, 6]
需要注意的是,flat()
方法只能展开一层,如果需要展开多层,则需要传入一个数字来指定展开的层数。另外,flat()
方法对于空位(null, undefined)并不友好,不会展开或者被删除。
递归是一种比较通用的方法,可以用来处理各种复杂的数组合并场景。对于多维数组,可以通过递归来展开数组和合并数组。
function flatten(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
// 递归展开数组
newArr = newArr.concat(flatten(arr[i]));
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
// 示例:将多维数组展开为一维数组
const arr = [1, [2, [3, 4]], [5, 6]];
const newArr = flatten(arr); // [1, 2, 3, 4, 5, 6]
以上为递归展开多维数组,使用递归合并多维数组则可以通过展开后的一维数组来合并。
function merge(arr) {
const newArr = flatten(arr);
// 对一维数组进行合并
return newArr;
}
// 示例:合并多维数组
const arr1 = [1, 2, [3, 4]];
const arr2 = [5, [6, 7]];
const arr3 = [8, [9, 10, [11, 12]]];
const mergedArr = merge([arr1, arr2, arr3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
以上为递归合并多维数组的实现方法,可以根据具体的需求选择不同的方法或者结合使用不同方法来实现。