あらゆるオブジェクトタイプを受け入れるハッシュコード関数はありますか? 質問する

あらゆるオブジェクトタイプを受け入れるハッシュコード関数はありますか? 質問する

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

set[obj] = true;

これは、ある程度までは機能します。文字列と数値ではうまく機能しますが、他のオブジェクトでは、すべて同じ値に「ハッシュ」され、同じプロパティにアクセスするようです。オブジェクトに一意のハッシュ値を生成する方法はありますか? 文字列と数値ではどのように行われるのでしょうか。同じ動作をオーバーライドできますか?

ベストアンサー1

JavaScript で Java のような hashCode() 関数が必要な場合は、次のようになります。

function hashCode(string){
    var hash = 0;
    for (var i = 0; i < string.length; i++) {
        var code = string.charCodeAt(i);
        hash = ((hash<<5)-hash)+code;
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;
}

これが Java での実装方法です (ビット演算子)。

hashCodeは正と負の可能性があることに注意してください。これは正常です。負の値を返すハッシュコードそのため、Math.abs()この機能と併用することを検討できます。

おすすめ記事