1

JavaScriptではどちらが高速ですか:整数インデックスを持つ配列をループするか、プロパティを持つオブジェクトをループするか?パフォーマンスの違いはありますか?

var array = [1, 2, 3];
for (var i = 0; i < array.length; i++) {
}

に比べ:

var object = {"1":1, "2":2, "3":3};
for (var x in object) {
}

私の理解の限りでは、JavaScript配列は実際にはマップに支えられているので、両方が同じように機能することを期待します。どんな情報でも大歓迎です!

for in編集:おそらく、ループのオーバーヘッド(より高価な場合など)と各要素にアクセスするためのルックアップ時間(object[x]vs )に関心があることを明確にする必要がありますarray[i]

4

2 に答える 2

3

受け入れられた回答は無効なベンチマークを使用しており、完全に間違っています。コメントが指摘するconsole.logように、テスト結果を支配し、それらを役に立たなくします。この比較を見てください:http://jsperf.com/performance-of-array-vs-object/17

配列の反復は、オブジェクトの反復よりも約48倍高速です。オブジェクトのキーの範囲を事前に知っていれば大幅に改善されますが、それでも配列の反復よりも大幅に遅くなります。

于 2014-10-31T06:18:44.413 に答える
0

jsperfhttp://jsperf.com/array-vs-object-loopを作成しまし

追加のプロパティアクセスにはもっと時間がかかると思いました。クローム24ではそれほど違いはありませんが、Firefox 19ではオブジェクトウェイに5〜10%長く必要です。

おそらく、オブジェクト/配列のサイズも考慮に入れる必要があります。

編集:その答えを忘れて、受け入れられたものを見てください!

于 2013-02-27T21:01:47.473 に答える