2012-05-16 157 views
3

这是基于我最后一个问题。将2个数组合并成一个多维数组?

我有这些阵列:

var array1 = new Array ("Pepsi", "Coke", "Juice", "Water"); 
var array2 = new Array ("35", "17", "21", "99"); 

我想将它们结合起来,形成一个多维数组是这样的:

[ 
    ["Pepsi","35"] 
    ["Coke", "17"] 
    ["Juice","21"] 
    ["Water","99"] 
] 

我想这个脚本:

Values=[]; 

for (i = 0; i < array1.length; i++) { 
    Values[i] = Array(array1[i], array2[i]); 
} 

但它给出了这样的结果(正确的值,不正确的名称):

[ 
    ["a","35"] 
    ["c","17"] 
    ["E","21"] 
    ["I","99"] 
] 
+4

[**你有什么对我的作品**](http://jsfiddle.net/VdRyr/) – qwertymk

+2

你代码是[正确](http://jsfiddle.net/xd7Bf/),至少在Firefox和Opera上... –

+0

大写E和我来自哪里,还是那些拼写错误? – Yatrix

回答

14
var array1 = ["Pepsi", "Coke", "Juice", "Water"], 
    array2 = ["35", "17", "21", "99"], 
    result = [], i = -1; 

while (array1[++i]) { 
    result.push([ array1[i], array2[i] ]); 
} 

书面,这种解决方案假定你将永远只能是使用字符串。正如@ ajax333221在下面的评论中指出的那样,如果您将booleanint值包含到此解决方案中,则会导致问题。因此,我想建议,将实现你的目标的改善,而不是绊倒难值和类型:

var array1 = [false, 0, "Juice", -1], 
    array2 = ["35", "17", "21", "99"], 
    result = []; 

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

工作完美!!!!!!!!!!!!!!!! – supercoolville

+1

你认为他会一直使用字符串。如果他与数字'0'或布尔值'false'等其他东西一起工作,将会出现问题 – ajax333221

+0

@ ajax333221是的,我假设问题代表了问题。 – Sampson

4

您可以在阵列,可以使用.map()

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

旧版本浏览器查看MDN shim

现场演示:http://jsfiddle.net/D9rjf/


如果你打算做这个操作相当多,你可以做一个可重复使用的功能。

在这个例子中,我扩展了Array.prototype,但如果你不喜欢这个,那就没有必要了。

Array.prototype.combine = function(arr) { 
    return this.map(function(v,i) { 
     return [v, arr[i]]; 
    }); 
}; 

var Values = array1.combine(array2); 

现场演示:http://jsfiddle.net/D9rjf/1/

+0

没有足够的答案像这样使用非破坏性方法创建数组 – Larry

相关问题