📜  javascript 合并多维数组 - Javascript (1)

📅  最后修改于: 2023-12-03 15:01:42.071000             🧑  作者: Mango

JavaScript 合并多维数组

在JavaScript中合并多维数组是一个非常常见的任务,但是由于数组的多样性和嵌套性,需要使用不同的方法和技巧来实现。本文将介绍几种常见的方法来合并多维数组。

方法1:Array.concat()

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()方法合并多维数组时,只有第一层会被合并,其余层将被认为是嵌套子数组。

方法2:Array.flat()

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)并不友好,不会展开或者被删除。

方法3:递归

递归是一种比较通用的方法,可以用来处理各种复杂的数组合并场景。对于多维数组,可以通过递归来展开数组和合并数组。

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]

以上为递归合并多维数组的实现方法,可以根据具体的需求选择不同的方法或者结合使用不同方法来实现。