14

私はそのような配列を持っています

var updates = [];

次に、このような配列にものを追加します

updates["func1"] = function () { x += 5 };

forループで関数を呼び出すと、期待どおりに機能します

for(var update in updates) {
     updates[update]();
}

しかし、 forEach を使用すると機能しません!?

updates.forEach(function (update) {

    update();
});

forEach は間違いなく Google Chrome のブラウザで動作しますが、何が間違っていますか?

4

2 に答える 2

24

forEachはover indexesnot over を繰り返しpropertiesます。あなたのコード:

updates["func1"] = "something";

配列の要素ではなく、オブジェクト (ちなみにこれは配列です) にプロパティを追加します。実際、これは次と同等です。

updates.func1 = "something";

ハッシュマップのようなものが必要な場合は、代わりにプレーン オブジェクトを使用できます。

updates = {};

updates["func1"] = "something";

そして、配列で使用すべきではない を使用しfor…inて反復します

または、Object.keysを使用してプロパティを取得し、それらを反復処理することもできます。

Object.keys(updates).forEach(function(key) {
    console.log(key);
}); 
于 2013-04-06T02:21:09.843 に答える
6

配列に項目を追加するのではなく、配列オブジェクトにオブジェクト プロパティを追加しています。 for .. inすべてのプロパティを返し、forEach配列要素のみを反復処理します。

配列に追加するには、次のようにします。

updates.push(function () { x += 5 });

このように追加する場合は、配列ではなくオブジェクトを使用してください。

var updates = {}

を使用しますfor ... in

于 2013-04-06T02:18:38.953 に答える