簡體   English   中英

遍歷 object 的數組並更改 object 的值

[英]Iterate over an array of object and change object value

我正在嘗試遍歷一個看起來像這樣的對象數組:

const arr = [{
  id: 1,
  name: "John",
  storeName: "Amazon",
  price: 100,
  isRecieved: false,
  deliveryDate: some date
}, ....]

我正在使用從用戶那里收到的產品 ID 遍歷數組,根據它的 ID 找到相關項目,並將鍵“isRecieved”從 false 更改為 true。

這是我的代碼:

const filterReceivedProduct = (list, id) => {
  const changeReceivedState = list.filter((item) => {
      return item.id === id ? **item[isRecieved]** = true : item;
  })
  return changeReceivedState
}

但是當我嘗試使用括號表示法訪問 object 時,它返回值(在本例中為“false”)並且我無法將值更改為 true..

我做錯了什么?

你不需要在這里使用.filter() filter 方法用於從數組中刪除元素。 您要做的是將每個元素/對象map轉換為新的 object,它具有舊 object 的所有屬性,包含更新的isRecieved屬性。 要創建具有舊 object 的所有屬性的新 object,您可以將舊object的屬性和值擴展到新的 ( {...item} )。 然后,您可以根據項目 ID 是否與傳遞到您的 function 中的 ID 匹配來更新isRecived

 const arr = [{ id: 1, name: "John", storeName: "Amazon", price: 100, isRecieved: false, deliveryDate: 'some date' }, { id: 2, name: "Alex", storeName: "Apple", price: 200, isRecieved: false, deliveryDate: 'some date2' }]; const filterReceivedProduct = (list, id) => list.map(item => ({...item, isRecieved: item.id === id // sets isRecieved to true or false based on the equalty comparison })); const res = filterReceivedProduct(arr, 1); console.log(res);

通過在.map()回調中創建一個新的 object ,您永遠不會改變arr中的原始對象,將所有內容視為不可變的。

這里的filter沒有意義。 過濾器用於根據條件filter一些數組。 如果您只想更改數組內部 object 的某些屬性,請為此目的使用map

請參見下面的示例。

 const arr = [{ id: 1, name: "John", storeName: "Amazon", price: 100, isRecieved: false, deliveryDate: 'some date' }, { id: 2, name: "Doe", storeName: "Amazon", price: 100, isRecieved: false, deliveryDate: 'some date' }]; filterReceivedProduct = (list, id) => { return list.map(item => { if(item.id === id) { item.isRecieved = true; } return item; }); } console.log(filterReceivedProduct(arr, 1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM