打字稿如何比较两个对象? [复制]

Posted

技术标签:

【中文标题】打字稿如何比较两个对象? [复制]【英文标题】:how typescript comparing two objects? [duplicate] 【发布时间】:2017-09-23 20:29:53 【问题描述】:

我有一门课叫tax

    export class tax 
        private _id: string;
        private _name: string;
        private _percentage: number;`

        constructor(id: string = "", taxName: string = "", percentage: number = 0) 
            this._id = id;
            this._name = taxName;
            this._percentage = percentage;
        


        public get id(): string 
            return this._id;
        

        public set id(v: string) 
            this._id = v;
        
        public get name(): string 
            return this._name;
        

        public set name(v: string) 
            this._name = v;
        
        public get percentage(): number 
            return this._percentage;
        

        public set percentage(v: number) 
            this._percentage = v;
        

        toString()
            return this.id;
        
    

当我创建这个类的 2 个不同对象时

    a1: tax = new tax("id","name",4);
    a2: tax = new tax("id","name",4); 

    console.log(a1 === a2); //false
    console.log(a1 == a2); //false

当我给 a1 === a2 它应该给真。 我必须在课堂上做什么改变,这样它才能给出 a1 === a2 ? 我必须在税课上做什么?或者我必须在税类中覆盖哪种方法?

【问题讨论】:

“它应该给出真实的” 不是它不应该。它只适用于 same 对象,因此对象及其引用。不适用于您的情况下的两个不同对象。因为您构造了两个新对象,所以它们并不相同,即使它们看起来很相似。 我的问题是**当我创建两个具有相同值的不同对象时,我必须在 tax 类中做哪些更改然后**我比较这两个对象它会给我真实的。 你不能做任何事情,所以=== 给你true 两个不同的对象。但是,当 Tax 类不会为相同的参数构造新对象但返回前一个对象时,您可以聪明地做它并将其转换为某种 Singleton 变体。那么a1 === a2 将是true 如果你对使用 lodash 没问题,它提供了一种在对象之间进行深度比较的方法。只需与 _.isEqual(a1, a2) 进行比较。文档可以在这里找到:lodash.com/docs/4.17.5#isEqual 这里要记住的是,您正在检查引用(内存位置)的相等性,但您想要进行值比较。 【参考方案1】:

您正在比较同一类的两个不同实例。尽管实例中的值相同,但它们是两个完全独立的实体。

例如,如果我们有一个具有单个属性 namePeople 类。即使世界上有两个人叫John Smith,他们也是两个完全不同的人。

每个实例都有自己的唯一标识符。

如果要检查两种税的值是否完全相同,可以一一检查。

console.log(a1.getId() === a2.getId() && a1.getName() === a2.getName() && a1.getPercentage() === a2.getPercentage()) // true

有关比较对象的更多信息可以找到here

【讨论】:

我成功使用了这个(以避免编写手动比较):npmjs.com/package/deep-equal

以上是关于打字稿如何比较两个对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中合并或连接两个地图列表? [复制]

如何让 Jest 自定义匹配器在打字稿中工作?

在打字稿中连接两个对象[重复]

打字稿如何将ajax对象分配给属性? [复制]

如何在打字稿中组合对象属性?

如何计算打字稿中两个日期之间的时间