2013-03-21 96 views
3

我有两个数组目前合并两个数组到一个数组的JavaScript

array1 = [5, 10, 20] 
array2 = [10, 20, 30] 

无论ARRAY3或者是这样的:

array4 = [{"a":5, "b":10}, {"a":10, "b":20}, {"a":20, "b":30}] 

我知道这可能是一个简单的问题,但我甚至确定什么array3将被称为所以它很难谷歌这种。

+0

这甚至不是一个合法的结果。 – Bergi 2013-03-21 19:49:57

+0

rel:http://stackoverflow.com/q/4856717/989121 – georg 2013-03-21 20:26:31

回答

7

非常简单,首先我们创建一个结果数组,然后遍历第一个数组并向其中添加元素。 Here is a working fiddle.

请注意,在您的代码中,您有类似{5,10}这样的符号,这在JavaScript中是非法的,我假定您的意思是一个数组。编辑后

var result = []; 
for(var i=0;i<array1.length;i++){ 
    result.push([array1[i],array2[i]]); 
} 

更新,好像你要的对象,尝试

var result = []; 
for(var i=0;i<array1.length;i++){ 
    result.push({a:array1[i],b:array2[i]});//add object literal 
} 

如果你愿意,你也可以使用map和功能上写相同的代码。 Here is a fiddle of that sort of implementation

2

这就是所谓的zip ...

function zip() { 
    var args = [].slice.call(arguments); 
    var shortest = args.length==0 ? [] : args.reduce(function(a,b){ 
     return a.length<b.length ? a : b 
    }); 

    return shortest.map(function(_,i){ 
     return args.map(function(array){return array[i]}) 
    }); 
} 

检查Underscore一个梦幻般的JS其中许多的效用函数库...

+0

请注意,这在许多浏览器上都会失败,因为它依赖于需要首先清理的“reduce”和“map”等方法。 – 2013-03-21 19:52:34

+0

@BenjaminGruenbaum:你说的“多浏览器”是指IE <9? – georg 2013-03-21 20:25:33

+0

@ thg435是的,我的意思是IE8,IE7和IE6这些仍然被广泛使用(IE6仍然超过20%)。我认为答案是可以的,但是使用这些代码的人应该知道需要如果您打算支持某些浏览器,则可以减少填充图和缩小图。 – 2013-03-21 20:27:32

0

你可以用ES6的新功能做到这一点很容易

var array1 = [5, 10, 20]; 
    var array2 = [10, 20, 30]; 
    var combineArray = [...array1 , ...array2]; 
     //output should be like this of combine array : [5, 10 ,20 ,10 ,20 ,30] 

如果你想要到内部的两个阵列额外的项目,那么你可以用下面的方式做到这一点:

var combineArray = [...array1 ,333, ...array2]; 
      //output should be like this of combine array : [5, 10 ,20 ,333 ,10 ,20 ,30] 
相关问题