亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較沒有對象引用的兩個對象 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 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號