簡體   English   中英

如何比較兩個對象數組,如果值相同,則添加新鍵:Javascript 中第二個對象的值

[英]How to compare two array of object and if value are same add new key: value on second object in Javascript

讓我們舉個例子。 我有兩個對象數組

let paymentType = [
  {id: "settle", set: "dis_10"},
  {id: "settle1", set: "dis_20"},
  {id: "settle2", set: "dis_30"},
]
let result = [
  {id: "settle", type: 40},
  {id: "settle4", type: 50},
  {id: "settle2", type: 60},
]

如果兩個數組中的 id 都匹配,我想將設置值添加到對象的結果數組中。 最終結果將是

let result = [
  {id: "settle", type: 40, set: "dis_10"},
  {id: "settle4", type: 50},
  {id: "settle2", type: 60},
]

我試過使用過濾器和一些方法,但沒有按預期工作

我會將所有內容reduce()到一個由id鍵控的累加器對象,然后從中獲取

 const paymentType = [ {id: "settle", set: "dis_10"}, {id: "settle1", set: "dis_20"}, {id: "settle2", set: "dis_30"}, ]; const result = [ {id: "settle", type: 40}, {id: "settle4", type: 50}, {id: "settle2", type: 60}, ]; const merge = (...arrays) => Object.values( arrays.reduce((a, array) => array.reduce((a, v) => { a[v.id] = {...(a[v.id] || {}), ...v }; return a; }, a), {}) ); console.log(merge(paymentType, result));

這具有線性運行時復雜性 ( O(n) ),這與在每次迭代中調用find()findIndex()的解決方案相反,后者最多為O(n log n)

希望能幫助到你:

 const paymentType = [ {id: "settle", set: "dis_10"}, {id: "settle1", set: "dis_20"}, {id: "settle2", set: "dis_30"}, ]; let result = [ {id: "settle", type: 40}, {id: "settle4", type: 50}, {id: "settle2", type: 60}, ]; result.forEach((resultItem, index) => { const id = resultItem.id; // Chech if the id exists in the paymentType array const paymentTypeIndex = paymentType.findIndex((paymentTypeItem) => paymentTypeItem.id === id); if(paymentTypeIndex > -1) { // If the id exists, we add the paymentType item values to the result item. resultItem.set = paymentType[paymentTypeIndex].set; } }); console.log(result);

如果我很好地理解你的問題,這可能是你正在尋找的東西

 result.forEach((item) => {
      if (paymentType.find((el) => el.id == item.id))
        item.set = paymentType.find((el) => el.id == item.id).set;
    });

這將導致

[
    {
        "id": "settle",
        "type": 40,
        "set": "dis_10"
    },
    {
        "id": "settle4",
        "type": 50
    },
    {
        "id": "settle2",
        "type": 60,
        "set": "dis_30"
    }
]

暫無
暫無

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

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