1. ホーム
  2. javascript

[解決済み] JavaScriptでハッシュコード関数のようなものはありますか?

2022-04-25 13:58:18

質問

基本的に、ユニークなオブジェクトの集合であるオブジェクトを作成しようとしています。私は、プロパティ名にオブジェクトを使用したJavaScriptオブジェクトを使用するという素晴らしいアイデアを思いつきました。そのようなものです。

set[obj] = true;

これは、ある点までは有効です。文字列や数値ではうまくいくのですが、他のオブジェクトでは、すべて同じ値に "hash"して、同じプロパティにアクセスするようです。オブジェクトに対してユニークなハッシュ値を生成できる何らかの方法はありますか?文字列と数値はどのようにそれを行うのですか?私は同じ動作をオーバーライドすることができますか?

どのように解決するのですか?

JavaScriptのオブジェクトは、キーとして文字列しか使えません(それ以外のものは文字列に変換されます)。

別の方法として、問題のオブジェクトをインデックス化した配列を保持し、そのインデックス文字列をオブジェクトへの参照として使用することができます。このようなものです。

var ObjectReference = [];
ObjectReference.push(obj);

set['ObjectReference.' + ObjectReference.indexOf(obj)] = true;

明らかに少し冗長ですが、それを処理するメソッドをいくつか書いて、getとsetを全て意のままにすることができます。

編集する

<ブロッククオート

これはJavaScriptで定義された動作で、具体的にはtoString変換が行われます。つまり、プロパティ名として使用されるオブジェクトに独自のtoString関数を定義することができます。- olliej

ハッシュ化したいオブジェクトにtoStringメソッドを定義することで、ハッシュ識別子を形成することができるのです。