【问题标题】:Combine 2 arrays into a multidimensional array?将2个数组组合成一个多维数组?
【发布时间】:2012-05-16 17:30:45
【问题描述】:

这是基于我的最后一个问题。

我有这些数组:

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"]
]

【问题讨论】:

标签: javascript


【解决方案1】:
var array1 = ["Pepsi", "Coke", "Juice", "Water"],
    array2 = ["35", "17", "21", "99"],
    result = [], i = -1;

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

如前所述,此解决方案假定您只会使用字符串。正如@ajax333221 在下面的cmets 中指出的那样,如果您将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] ] );
}

【讨论】:

  • 您认为他将始终使用字符串。如果他使用其他东西,比如数字0 或布尔值false,就会有问题
  • @ajax333221 是的,我假设问题代表了问题。
  • @JonathanSampson 我现在假设你不喜欢编写可维护和灵活的代码
  • @ajax333221 感谢您的建议,我添加了一个for 循环来回避任何与虚假性质的类型和值有关的问题。
【解决方案2】:

您可以在数组上使用.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/

【讨论】:

  • 没有足够的答案像这样使用非破坏性方法创建数组
猜你喜欢
  • 2018-07-06
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
相关资源
最近更新 更多