合并 JavaScript 中的两个数组(ES5 或更低版本)

Merge two arrays in JavaScript (ES5 or below)

我有 2 个数组需要在 javascript 中以特定顺序合并。 这是示例..

var alphabets = [[["a"], ["b"]], ["c"], ["d"], [["e"], ["f"]]];
var numbers   = [[["1"], ["2"]], ["3"], ["4"], [["5"], ["6"]]];

var result    = [[["a", "1"], ["b", "2"]], ["c", "3"], ["d", "4"], [["e", "5"], ["f", "6"]]];

这里需要帮助..

这是我到目前为止尝试过的方法

var res = [];

var i;
for (i = 0; i < cars.length; i++) {
  res.push(alphabets[i].concat(numbers[i]));
}

对于这个非常有趣的“数组合并”挑战...(我假设并希望这是更复杂事物的“最小”示例)。你肯定需要一个递归函数.

一个简单的 for 循环不足以确保遍历数组的任何深层次而不会使自己陷入一堆重复的代码行中。


警告:从结构的角度来看,以下逻辑仅适用于两个完全匹配的数组。

顺便问一下什么是递归函数? : freeCodeCamp tutorial ← 我知道的最好的简短示例。


这是我在几分钟内为您制作的 CodePen 演示...我已经知道递归以及何时使用它。但这是一个很好的例子,所以感谢你的问题。

var alphabets = [[["a"], ["b"]], ["c"], ["d"], [["e"], ["f"]]];
var numbers   = [[["1"], ["2"]], ["3"], ["4"], [["5"], ["6"]]];

// Expected result
var expected  = [[["a", "1"], ["b", "2"]], ["c", "3"], ["d", "4"], [["e", "5"], ["f", "6"]]];

// A merging function
let merge = (arr1, arr2) => {
  
  return arr1.map((item, index) =>{
    
    // if the item contains arrays
    // do another recursion
    if (Array.isArray(item[0])){
      return merge(item, arr2[index])  // a recursion is a function calling itself.
    }
    
    // Otherwize, return a "merged" array
    return [item[0], arr2[index][0]]
  })
                         
}

let result = merge(alphabets, numbers)

console.log("Result:\n", JSON.stringify(result))
console.log("Expected:\n", JSON.stringify(expected))

CodePen

该递归的唯一条件是 string 测试...您可能需要对数组进行更多测试。小心任何无限循环...导致 堆栈溢出 !!!祝您编码愉快!