2

配列のコレクション(私が推測する配列の配列)内の値を反復して取得することに問題があります

以下のコードが、各配列の 3 つの値を順番に表示するアラートを表示することを願っています (たとえば、「乳児」、「0」、「2」)。ただし、アラートには「0」、「未定義」、「未定義」と表示されるだけです。 .

私は何が欠けていますか?

配列を宣言します。

var ageGroups = [["infant", 0, 2], ["child", 3, 18], ["child", 3, 17], ["adult1", 18, 64], ["adult2", 65, 74], ["adult3", 75, 79]];

配列を反復する

for (var item in ageGroups) {
    alert(item[0]);
    alert(item[1]);
    alert(item[2]);
}
4

7 に答える 7

4

alert の代わりに使用console.logすると、Alert は [Object ] のみを表示します。変数がオブジェクトの場合、コンソールでオブジェクトの種類を確認し、さらにデバッグすることができます

for (var item in ageGroups) { 
    console.log(ageGroups[item][0]); 
    console.log(ageGroups[item][1]); 
    console.log(ageGroups[item][2]); 
}
于 2012-04-04T12:35:06.120 に答える
1
for (var item in ageGroups) {
    alert(ageGroups[item][0]);
    alert(ageGroups[item][1]);
    alert(ageGroups[item][2]);
}
于 2012-04-04T12:35:22.633 に答える
1

あなたの問題は、そのアイテムがあなたの配列の鍵であるということです

これを試して:

for (var item in ageGroups) {
    alert(ageGroups[item][0]);
    alert(ageGroups[item][1]);
    alert(ageGroups[item][2]);
}
于 2012-04-04T12:35:46.403 に答える
1

くそっforEach!:-) クロスブラウザではありませんが、シムは簡単に実装できます。

// Call forEach and define the callback function
ageGroups.forEach(loopArray)

// Now let's work with the array!
function loopArray(ageGroup) {
    console.log(ageGroup[0])
    console.log(ageGroup[1])
    console.log(ageGroup[2])
}
于 2012-04-04T12:46:50.693 に答える
0

for inJavaScript で配列を反復処理するために使用しないでください。その目的は、オブジェクト プロパティを反復処理することです。代わりにインクリメンタル for ループを使用してください。

for (var i=0; i<ageGroups.length; i++) {
  for (var j=0; j<ageGroups[i].length; j++) {
    console.log(ageGroups[i][j]);
  }

  // Or instead of an inner loop access them individually
  console.log(ageGroups[i][0]);
  console.log(ageGroups[i][1]);
  console.log(ageGroups[i][2]);
}

実際に見て...

たとえば、 のような配列項目を 1 つだけ定義した場合、配列で構造を使用するfor-inと、インクリメンタル ループとは大幅に異なる結果が生成される可能性がありますmyArr[3] = 123;。その場合、JavaScript は項目 0 から 2 を割り当て、for ループはそれらを繰り返しますが、それはしfor-inません。for-inさらに重要なことは、外部スクリプトとフレームワークが Array プロトタイプを拡張し、配列要素が本当に必要なときにイテレータに突然含まれるプロパティを追加する可能性があることです。

于 2012-04-04T12:34:07.533 に答える
0

やったほうがいい

for (i = 0; i <ageGroups.length; i++) {
    var item = ageGroups[i];
    alert(item[0]);
    alert(item[1]);
    alert(item[2]);
}

for..inJavaScript では、オブジェクトのプロパティを反復処理するために使用されます

于 2012-04-04T12:34:25.840 に答える
0

これが最適化されたforループです。ここに長さを保存しているので、反復ごとに評価されません。

 for (var i = 0, l = ageGroups.length; i < l; i++){
    alert(ageGroups[i][0]);
    alert(ageGroups[i][1]);  
    alert(ageGroups[i][2]);      
 }

あなたの例とまったく同じようにするには、 ageGroup の反復を変数に格納できます。

for (var i = 0, l = ageGroups.length, item; i < l; i++){
    item = ageGroups[i];  
    alert(item[0]);
    alert(item[1]);
    alert(item[2]);
}
于 2012-04-04T12:40:03.740 に答える