如何在Typescript中获取对象的哈希值?

Nat*_*thi 3 typescript ecmascript-6

如何在打字稿中获取对象的哈希值。

例如 :

let user:any = {name:'tempuser', age:'29'};
let anotheruser:any = {name:'iam', age:'29'};
if( Object.GetHashCode(user) === Object.GetHashCode(anotheruser)){
   alert('equal');
}
Run Code Online (Sandbox Code Playgroud)

我们还可以识别对象是否被修改。

小智 6

如果您想比较对象而不是数据,那么 @Valery 解决方案不适合您,因为它会比较数据而不是两个对象。如果你想比较数据而不是对象,那么 JSON.stringify(obj1) === JSON.stringify(obj2) 就足够了,这是简单的字符串比较。


Val*_*éry 5

AFAIK,JavaScript和TypeScript均未提供通用的哈希函数。

您必须导入第三方库(例如ts-md5),并为其提供对象的字符串表示形式:Md5.hashStr(JSON.stringify(yourObject))

显然,这取决于您的确切用例,这可能是完美的,或者太慢,或者产生太多冲突...


小智 5

对于非加密用途,例如实现哈希表,这里是古老的字符串 java hashCode 的打字稿:

export function hashCode(str: string): number {
    var h: number = 0;
    for (var i = 0; i < str.length; i++) {
        h = 31 * h + str.charCodeAt(i);
    }
    return h & 0xFFFFFFFF
}
Run Code Online (Sandbox Code Playgroud)

  • @doug65536 是的,但有时我们必须退后一步,尝试思考 OP 实际上想要实现的目标。也许他们做出的假设导致他们针对给定问题得出次优解决方案?无论哪种方式,诸如“你应该阅读这个问题”之类的被动攻击性短语都没有帮助。因此,让我们尽量保持平台友好,不要因为简单地分享我们的想法而互相嘲笑。 (8认同)
  • @K-Dawg,你应该阅读这个问题。问题是如何获得哈希码。 (4认同)