59

私が最近書いていたいくつかのアルゴリズムでは、ハッシュが優れていると思いました。オブジェクト内のメンバー変数をキーと値のペアとして使用できるのではないかと考えました。舞台裏で何が起こっているのか本当にわからないので、これが最適かどうかはわかりません。また、V8 は他の環境とは異なる方法で行うと思います。しかし、メンバー変数の検索はかなり速いと思います(うまくいけば)?

とはいえ、JavaScript オブジェクトのメンバー変数の書き込み、読み取り、作成、および削除の実行時の複雑さがすべて O(1) であるかどうか疑問に思っています。環境に違いがある場合 (v8 とその他)、それらは何ですか?

4

3 に答える 3

69

はい、ハッシュです。実装はブラウザーによって異なります。オブジェクトはハッシュではないと主張する多くの記事にもかかわらず、それらは非常にハッシュのように動作するため、そのように使用できます。

パフォーマンス テストを実行して、これを証明する必要がありました。

これらのテストを読み取る方法は、オブジェクトのサイズが大きくなったときに ops/sec にパフォーマンスの違いがない場合、それはオブジェクトがハッシュであることを意味します。ハッシュの決定的な特徴は、他の操作と比較して高速または低速であるにもかかわらず、各操作の複雑さが O(1) であることです。

テスト:
http://jsperf.com/objectsashashes/2 (100 キー)
http://jsperf.com/objectsashashes/3 (100k キー)
http://jsperf.com/objectsashashes/ (100 万キー)
http:/ /jsperf.com/objects-as-hashes-300-mil (10m キー)

注: 各ブラウザは、異なる操作で高速/低速です。これは、リリース間および年ごとに変化するようです。

于 2012-09-03T23:31:18.843 に答える
13

JavaScript オブジェクトハッシュです。オブジェクトのプロパティに対して一定時間の CRUD 操作を提供しない、まともな実装は想像できません。

このアプローチで特定のパフォーマンスの問題が発生していますか?

于 2012-09-03T03:41:48.877 に答える