如何在JavaScript中通过索引合并两个对象数组?

时间:2017-03-30 18:41:28

标签: javascript arrays object

将下面两个数组合并以获得所需结果的最佳方法是什么。我希望它们能够通过索引进行组合。

输入是:

var array1 = [[1,2,3,4],[4,5,6,7]]
var array2 = [[a,b,c,d],[e,f,g,h]]

所需的输出将是:

var array3 =[{
              array1:[1,2,3,4],
              array2:[a,b,c,d]
             },
             {
              array1:[4,5,6,7],
              array2:[a,b,c,d]
             }]

只要按索引对输出进行分组,输出的任何变化都会起作用。提前谢谢。

编辑:不是重复的建议。建议输出[a,1,b,2]并且不对所需输出显示的方式进行分组。

3 个答案:

答案 0 :(得分:2)

我认为您正在寻找matrix transposition,其中传递的2d数组是[array1, array2]

编辑:当只使用两个数组时,看起来这个操作也可以称为“压缩”。矩阵转置可以支持任意数量的行,而不仅仅是两行。

var array1 = [
  [1, 2, 3, 4],
  [4, 5, 6, 7]
]
var array2 = [
  ['a', 'b', 'c', 'd'],
  ['e', 'f', 'g', 'h']
]

function transpose(matrix) {
  return matrix.map(function(_, i) {
    return matrix.map(function(e) {
      return e[i]
    })
  })
}

var result = transpose([array1, array2])

console.log(result)
.as-console-wrapper { min-height: 100%; }

如果您确实想要使用属性array1array2而不是数组的嵌套对象,则以下解决方案也应该有效(this answer的变体):

var array1 = [
  [1, 2, 3, 4],
  [4, 5, 6, 7]
]
var array2 = [
  ['a', 'b', 'c', 'd'],
  ['e', 'f', 'g', 'h']
]


var result = array1.map(function (e1, i) {
  return { array1: e1, array2: array2[i] }
})

console.log(result)
.as-console-wrapper { min-height: 100%; }

答案 1 :(得分:2)

这与How do I zip two arrays in JavaScript?非常相似,只是您只需将输出格式从数组更改为对象:

var array1 = [[1,2,3,4],[4,5,6,7]];
var array2 = [['a','b','c','d'],['e','f','g','h']];

var array3 = array1.map(function(_, i) {
  return {
    array1: array1[i],
    array2: array2[i]
  };
});

console.log(array3);

答案 2 :(得分:0)

您可以使用数组映射函数:

var array1 = [[1,2,3,4],[4,5,6,7]];
var array2 = [['a','b','c','d'],['e','f','g','h']];

var array3 = array1.map(function (e, i) {
    return [e, array2[i]];
});

console.log(array3);