7

これは私の最後の質問に基づいています。

私はこれらの配列を持っています:

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

2 に答える 2

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

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

書かれているように、このソリューションは、文字列のみを使用することを前提としています。@ ajax333221 が以下のコメントで指摘しているように、このソリューションに関与しbooleanたりint値を付けたりすると、問題が発生する可能性があります。そのため、難しい値や型につまずくことなく、目標を達成するための改善を提案したいと思います。

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] ] );
}
于 2012-05-16T17:34:43.720 に答える
12

.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/

于 2012-05-16T17:43:14.470 に答える