【问题标题】: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
  • 这里要记住的是,您正在检查引用(内存位置)的相等性,但您想要进行值比较。

标签: javascript typescript


【解决方案1】:

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

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

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

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

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

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

【讨论】:

猜你喜欢
  • 2019-02-02
  • 2020-02-18
  • 2014-01-12
  • 2013-04-10
  • 1970-01-01
  • 2021-04-29
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多