将下面两个数组合并以获得所需结果的最佳方法是什么。我希望它们能够通过索引进行组合。
输入是:
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]并且不对所需输出显示的方式进行分组。答案 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%; }
如果您确实想要使用属性array1
和array2
而不是数组的嵌套对象,则以下解决方案也应该有效(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);