为了账号安全,请及时绑定邮箱和手机立即绑定

比较没有对象引用的两个对象 Angular 10

比较没有对象引用的两个对象 Angular 10

慕的地8271018 2023-07-14 15:32:40
我想比较两个对象看看它们是否相等。对象 A (offer) 是原始对象,对象 B (offerTemp) 是 A 的副本。对象 A 显示在组件的表格中,以查看表格中是否有任何更改,我想将 A 与 B 进行比较。但是当我调用该函数来检查它们是否相等时,它说对象不相等。我认为这是因为对象 A 有该对象的引用,而 B 没有(至少这是我在控制台中记录这两个对象时看到的)。对象 A(报价)(来自控制台):Offer {id: 1834, title: "A great article offer - 1834", description: "browser", sellDate: Mon Dec 25 2045 21:54:06 GMT+0100 (Central European Standard Time), valueHighestBid: 753, …}对象 B (offerTemp)(来自控制台):{id: 1834, title: "A great article offer - 1834", description: "browser", sellDate: Mon Dec 25 2045 21:54:06 GMT+0100 (Central European Standard Time), valueHighestBid: 753, …}这是来自component.ts:ngOnInit(): void {    this.offer = this.offerService.FindById(this.editOfferId);    this.offerTemp = Object.assign({}, this.offer);  }cancelSelected(offer: Offer): void{    if (offer === this.offerTemp) {    // do stuff...    }    else {      console.log(this.offer === this.offerTemp); // false in the console      console.log(this.offer);      console.log(this.offerTemp);    }  }这是我的 html 中的部分:<div>  <table>    <tr>       <th>Selected offer details: (id: {{offer.id}})</th>    </tr>    <tr>      <td>Title</td>      <td>        <input [(ngModel)]="offer.title" type="text" name="" id="">      </td>    </tr>    <tr>      <td>description</td>      <td>        <input [(ngModel)]="offer.description" type="text" name="" id="">        </td>    </tr>    <tr>      <td>auctionStatus</td>      <td>        <select>          <option *ngFor="let key of keys" [value]="key" [selected]="offer.auctionStatus">{{statusen[key]}}</option>        </select>      </td>    </tr>    <tr>      <td>valueHighestBid</td>      <td>        <input [(ngModel)]="offer.valueHighestBid" type="text" name="" id="">     </td>    </tr>有没有什么方法可以在没有对象引用的情况下比较这些对象,或者可以通过其他方式解决这个问题?
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

JavaScript 没有针对对象和数组的内置属性相等运算符。

检查对象是否相等的一个简单方法是使用 JSON.stringify:

JSON.stringify(objectA) === JSON.stringify(objectB);

这会将对象转换为字符串并使之易于比较。当对象嵌套时,这种方法也很有效。

另一种选择是使用 equals 方法(或者更好的是也适用于嵌套对象的深度 equal 方法),该方法迭代所有对象的属性并比较它们的值。


查看完整回答
反对 回复 2023-07-14
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

仅当两个变量引用同一对象时,使用三个等号对两个对象进行比较===才会返回。true你显然不希望这样。

您需要创建自己的比较对象的方式,或者使用一些提供对象深度比较的 javascript 库,例如来自 lodash 的_.isEqual :

let object = { 'a': 1 };

let other = { 'a': 1 };

 

_.isEqual(object, other);

// => true

 

object === other;

// => false


查看完整回答
反对 回复 2023-07-14
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信