如何在打字稿中获得对象的哈希值?

问题描述 投票:0回答:4

例如:

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

此外,我们还可以识别该对象是否经过修改。 

Afaik,JavaScript和Typescript均未提供通用的哈希功能。
typescript ecmascript-6
4个回答
12
投票
TS-MD5

一样导入第三方LIB,并给它给您对象的字符串表示:

Md5.hashStr(JSON.stringify(yourObject))

.。 显然,根据您的精确用例,这可能是完美的,或者太慢,或者产生太多的冲突...


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


6
投票

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 }


6
投票

我使用以下功能,尽管我不确定它是否可靠:

function hashObject(object: Record<string, any>): string {
  if (typeof object != "object") {
    throw new TypeError("Object expected");
  }

  const hash = crypto
    .createHash("sha256")
    .update(JSON.stringify(object), "utf8")
    .digest("hex" as crypto.BinaryToTextEncoding);

  return hash;
}

0
投票
https://github.com/sindresorhus/hash-object/blob/main/index.js

中启发,这可能提供更好的解决方案。


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.