1

私は JavaScript が初めてで、最近は JavaScript に移植しようとしている PHP でコーディングしています。PHP は、JavaScript のデフォルト言語には存在しないコンテナ クラスにMap直接実装されています。Array

私が読んでいるように見える誰もが、連想配列にオブジェクトを使用するように言っていますが、これを読んだ後、具体的には:

プロパティ検索

オブジェクトのプロパティにアクセスするとき、JavaScript は要求された名前のプロパティが見つかるまで、プロトタイプ チェーンを上方向にトラバースします。

チェーンの先頭、つまり Object.prototype に到達しても、指定されたプロパティが見つからない場合は、代わりに値 undefined が返されます。

Object特に目的の配列に数千の数が含まれている場合は、連想配列の効率的な解決策ではないようです。

JavaScript内のマップ/連想配列の効率的な代替手段は何ですか? map/assoc として実装された優れたコンテナ クラスを提供する優れたサードパーティ ライブラリはありますか。配列?コード内のさまざまなインデックス戦略のために、大規模な複数次数の連想配列を簡単かつ効率的に作成できる必要があるため、最適な並べ替えおよび検索アルゴリズムが必要です。

これがすべて明らかなように思われる場合はご容赦ください。オブジェクトとしての配列であり、これは最適なアプローチではないと考えています。ヘルプとガイダンスは大歓迎です。

4

2 に答える 2

1

Objectチェーンの最上位prototype(サブプロトタイプでサブオブジェクトを使用していない) と同様に、評価するチェーンはありません。したがってObject.prototype、プロパティをチェックするためにアクセスする唯一のプロトタイプです。したがって、引用で暗示したような問題は実際にはありません。

于 2011-06-11T21:43:11.890 に答える
1

あなたの質問の引用は、プロパティの検索がどのように最適化されているかとはまったく関係ありません。これを行うと:var x = {}そしてx.foo、 foo が存在するかどうかをチェックします。そうでない場合、xオブジェクトの最も原始的なタイプであるため、「チェーンを上って」他の場所を探すことはありません。

あなたが本当に求めているのは、オブジェクトを持っていることを考えると、文字列検索がどの程度最適化されているかです。とはいえ、これをチェックしてください:

http://www.timdown.co.uk/jshashtable/

JS でのハッシュ テーブルの実装です。どのように最適化されているかは調べていませんが、Chrome では、通常の JS オブジェクトをハッシュ テーブルとして使用するよりも 5 倍から 10 倍遅くなりました。(テスト サイズは 10000 要素です。) シンプルな JS ハッシュ テーブルを自分で作成し、同じような結果を得ました。

PHP配列がどのように機能するかのように、すべてのブラウザが内部的に最適化されたハッシュとして文字列キーを実装していることを想像しますが、明らかにこれをテストする必要があります。パフォーマンスの観点からすると、そうでない場合は非常にばかげているように思えます。

于 2011-06-11T22:22:10.240 に答える