2016-04-08 6 views
-2

私が入れたこの配列に 'value key'を代入することは可能ですか?

var list =['lemon', 'apple']; 
list['yuck'] = 'durian'; 

list.forEach(function(i){ 
    console.log(i); 
}); 

アウトのような配列が

lemon 
apple 

である持っているので、どこドリアンのですか?

この質問は、どのように正しく配列を使用するかについてではなく、私たちがそれを行うことができて奇妙だと思っています。実際に何が起こっていますか?

+1

あなたのアレイにプロパティ 'yuck'を追加します。新しいインデックスを追加しません。 'forEach'は配列のインデックスだけを繰り返します。インデックスはゼロより大きい整数に限ります。最大サイズとそれらと 'length'プロパティとの関係に似ています。 – ste2425

+0

'list.push(" durian ");'を実行する必要があります。 –

+0

リンクされたQAの良い回答は受け入れられません。これを閉じないという点はまだありません。 –

答えて

2

forEach iterates on an array's elementsです。これは、正の整数で識別されるプロパティです。 'yuck'は、整数に変換できない文字列です。

for (var key in list) { 
    console.log(list[key]); 
} 

をしかし、それは配列のすべての最適化を破る:

あなたが本当にすべての値に対して反復処理したい場合は、これを行うことができます。おそらく、代わりにSetまたはオブジェクトを使用する必要があります。

+0

私はセットをチェックアウトしました。 –

+0

対象のブラウザでサポートされていないブラウザの場合は、配列の代わりに単純なオブジェクトを使用します。または、プッシュを使用して要素を追加します。 –

+0

あなたはなぜそれが最適化を壊すのか詳しく教えていただけますか? –

2

これは、javascript配列に値を追加する方法ではないためです。あなたがここに構文をメソッドArray.prototype.push()

var list = ['lemon', 'apple']; 
list.push('durian'); 

list.forEach(function(i){ 
    console.log(i); 
}); 
1

list['yuck'] = 'durian';

を使用する必要があり、プロパティyuckにテキストdurainを追加しますと言います。

ここでは、キー値を追加しています。これは、オブジェクトに値を割り当てる方法です。

配列にキー値を追加できないため、上記の行は例外をスローします。したがって、配列は変更されません。

そして、この1

list.forEach(function(i){ console.log(i); });

あなたが最初の配列をループしています。したがって、同じ値が出力されます。

一方、あなたは使用できます。 list.push('durian')

それとも

list[2] = 'durian'

関連する問題