【问题标题】:How to get Hash value of an object in Typescript?如何在 Typescript 中获取对象的哈希值?
【发布时间】:2016-04-23 13:11:47
【问题描述】:

如何在 typescript 中获取对象的哈希值。

例如:

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

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

【问题讨论】:

  • JS 对象没有哈希码(除非你实现了)。
  • 是的。这就是我在这里发帖寻求帮助的原因。如果您有任何库来获取对象的哈希值,请告诉我。
  • google 是搜索此类库的更好地方。 SO 不做图书馆推荐。

标签: typescript ecmascript-6


【解决方案1】:

AFAIK,JavaScript 和 TypeScript 都不提供通用散列函数。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

    对于非加密用途,例如实现哈希表,这里是古老的 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
    }
    

    【讨论】:

    • 这很有趣,但如果我理解正确,您只是在循环遍历您的字符串,然后将每个字符转换为字符代码,对吗?与简单地进行字符串化和比较相比,这实际上有什么优势吗?我很可能错过了一些东西,但感觉这只是增加了额外的处理开销。
    • @K-Dawg,您应该阅读这个问题。问题是如何获得哈希码。
    • @doug65536 是的,但有时我们必须退后一步,尝试考虑 OP 实际想要实现的目标。也许他们已经做出假设,导致他们针对给定问题找到次优解决方案?无论哪种方式,诸如“您应该阅读问题”之类的被动攻击性短语都无济于事。因此,让我们尽量保持平台友好,不要为了简单地分享我们的想法而互相嘲笑。
    猜你喜欢
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2014-07-26
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多