例如:
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均未提供通用的哈希功能。
一样导入第三方LIB,并给它给您对象的字符串表示:
Md5.hashStr(JSON.stringify(yourObject))
.。 显然,根据您的精确用例,这可能是完美的,或者太慢,或者产生太多的冲突...
如果要比较对象而不是数据,那么@Valery解决方案不适合您,因为它将比较数据,而不是两个对象。 如果要比较数据而不是对象,则json.stringify(obj1)=== json.stringify(obj2)就足够了,这就是简单的字符串比较。
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
}
我使用以下功能,尽管我不确定它是否可靠:
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;
}
https://github.com/sindresorhus/hash-object/blob/main/index.js
中启发,这可能提供更好的解决方案。