将2个数组组合成一个多维数组?

sup*_*lle 6 javascript

这是基于我的上一个问题.

我有这些数组:

var array1 = new Array ("Pepsi", "Coke", "Juice", "Water");
var array2 = new Array ("35",    "17",   "21",    "99");
Run Code Online (Sandbox Code Playgroud)

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

[
    ["Pepsi","35"]
    ["Coke", "17"]
    ["Juice","21"]
    ["Water","99"]
]
Run Code Online (Sandbox Code Playgroud)

我试过这个脚本:

Values=[];

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

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

[
    ["a","35"]
    ["c","17"]
    ["E","21"]
    ["I","99"]
]
Run Code Online (Sandbox Code Playgroud)

Sam*_*son 17

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

while ( array1[++i] ) { 
  result.push( [ array1[i], array2[i] ] );
}
Run Code Online (Sandbox Code Playgroud)

如上所述,此解决方案假设您将只使用字符串.正如@ 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] ] );
}
Run Code Online (Sandbox Code Playgroud)


cli*_*ity 7

你可以.map()在数组上使用.

var Values = array1.map(function(v,i) {
    return [v, array2[i]];
});
Run Code Online (Sandbox Code Playgroud)

请参阅旧版浏览器的MDN垫片.

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


如果您要进行相当多的操作,可以创建一个可重用的函数.

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

Array.prototype.combine = function(arr) {
    return this.map(function(v,i) {
        return [v, arr[i]];
    });
};
Run Code Online (Sandbox Code Playgroud)
var Values = array1.combine(array2);
Run Code Online (Sandbox Code Playgroud)

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