簡體   English   中英

如何通過比較 javascript 中的兩個 object 數組來更新特定屬性?

[英]How to update specific property by comparing two array of object in javascript?

我在 javascript 中有以下兩個 object 數組

data1 = [
  {
    id: 123,
    option: "ABC",
    value: "123"
  },
  {
    id: 234,
    option: "DFG",
    value: "234"
  }
];

data2 = [
  {
    id: 123,
    option: "ABC",
    value: "123"
  }
];

當 id 與 object 的第二個數組匹配時,我想將 object 的第一個數組中的值(屬性)設置為 0,僅用於該特定 id。 如下所示,一旦 id 123 在兩個數組中都匹配,那么 data1 數組應該如下所示

data1 = [
  {
    id: 123,
    option: "ABC",
    value: "0"
  },
  {
    id: 234,
    option: "DFG",
    value: "234"
  }
];

如何實現上述場景?

您可以將 data2 的 id 保存在Set中並遍歷 data1 並更改每個項目的值(如果其 id 在集合中):

 let data1 = [{ id: 123, option: 'ABC', value: "123" }, { id: 234, option: "DFG", value: "234" } ]; let data2 = [{ id: 123, option: 'ABC', value: "123" } ]; let set = new Set(); for(let i = 0; i < data2.length; i++) set.add(data2[i]['id']) for(let i = 0; i < data1.length; i++) if(set.has(data1[i]['id'])) data1[i]['value'] = 0; console.log(data1)

您可以使用foreach ,這將改變您需要的第一個數組,或者您也可以使用map (但它會生成新數組):

 var data1 = [{ id: 123, option: 'ABC', value: "123" }, { id: 234, option: "DFG", value: "234" } ]; var data2 = [ { id: 123, option: 'ABC', value: "123" } ]; data1.forEach(k=>{ ispresent = data2.find(p=>p.id==k.id); if(ispresent) k.value = '0' }); console.log(data1);

您可以使用new Set()從第二個數組中創建一組所有 object id,然后將第一個數組.map()設置為新對象,如果對象的 id 在集合內,則更改value屬性(使用.has() ):

 const data1 = [{ id: 123, option: 'ABC', value: "123" }, { id: 234, option: "DFG", value: "234" } ]; const data2 = [{ id: 123, option: 'ABC', value: "123" }]; const idSet = new Set(data2.map(o => o.id)); const res = data1.map(o => ({...o, value: idSet.has(o.id)? "0": o.value})); console.log(res);

暫無
暫無

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

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