【问题标题】:How to compare two objects in Angular not using reference of object如何在Angular中比较两个对象而不使用对象的引用
【发布时间】:2017-10-08 18:47:19
【问题描述】:

how typescript comparing two objects?

originaltraits:{
artistic:25,
athletic:24,
goodLooks:70,
happiness:0,
health:81
}
newtraits:{
artistic:25,
athletic:24,
goodLooks:70,
happiness:0,
health:81
}

我有这两个对象,我想比较这些对象的字段,而不是在 Angular 中使用对象引用,那么如何比较?

Why does two equal Objects shows 'not equal" in Angular 2

【问题讨论】:

  • 如果您对属性的顺序有把握,可以JSON.stringify进行比较。

标签: angular typescript


【解决方案1】:

假设您具有相同的对象属性顺序,您可以使用 JSON.stringify() 比较对象。 即:

JSON.stringify(obj1).toLowerCase() === JSON.stringify(obj2).toLowerCase();

【讨论】:

  • 这种方法的问题是,对象{Foo=1, Bar =123}不等于对象{Bar =123, Foo=1},一些排序会有所帮助。
  • 除了排序问题,这个toLowerCase()是错误的,会让{ x: 'FOo' }等于{ x: 'foo' }
【解决方案2】:

如果您需要在项目中进行更多类似这样的比较,我强烈建议您使用 deep-equal 之类的库:

https://www.npmjs.com/package/deep-equal

它有自己的类型可以与 TypeScript 一起使用:

https://www.npmjs.com/package/@types/deep-equal

【讨论】:

  • 如果我使用 deep-equal,我会收到此错误。错误 TS2497:模块 '"/angularCodeFolder/node_modules/@types/deep-equal/index"' 解析为非模块实体,无法使用此构造导入。可能是什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多