首頁  >  文章  >  web前端  >  如何使用共享鍵合併數組中的 JavaScript 物件?

如何使用共享鍵合併數組中的 JavaScript 物件?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-30 23:43:30872瀏覽

How to Merge JavaScript Objects in an Array with Shared Keys?

使用共享鍵合併陣列中的 JavaScript 物件

在 JavaScript 中,通常需要將具有相似鍵的物件組合成單一物件。考慮給出的範例:

<code class="js">const array = [
  {
    name: "foo1",
    value: "val1"
  },
  {
    name: "foo1",
    value: ["val2", "val3"]
  },
  {
    name: "foo2",
    value: "val4"
  }
];</code>

目標是將此數組重新組織為「輸出」數組,其中所有值鍵都合併到具有共享名稱的物件中。預期輸出如下:

<code class="js">const output = [
  {
    name: "foo1",
    value: ["val1", "val2", "val3"]
  },
  {
    name: "foo2",
    value: ["val4"]
  }
];</code>

合併物件

解決此問題的一種方法是使用以下步驟:

  1. 使用forEach() 迭代數組中的每個物件。
  2. 過濾輸出陣列以尋找具有相同名稱鍵的現有物件。
  3. 如果找到現有對象,則連接將目前對象的值加到其值數組中。
  4. 如果找不到現有對象,則使用目前對象的屬性建立一個新對象並將其新增至輸出數組。
  5. 處理這種可能性透過將值轉換為陣列來將值轉換為字串。

範例程式碼

以下程式碼實作了所描述的方法:

<code class="js">const array = [
  {
    name: "foo1",
    value: "val1"
  },
  {
    name: "foo1",
    value: ["val2", "val3"]
  },
  {
    name: "foo2",
    value: "val4"
  }
];

let output = [];

array.forEach(item => {
  const existing = output.filter(v => v.name == item.name);
  if (existing.length) {
    const existingIndex = output.indexOf(existing[0]);
    output[existingIndex].value = output[existingIndex].value.concat(item.value);
  } else {
    if (typeof item.value == 'string') item.value = [item.value];
    output.push(item);
  }
});

console.log(output);</code>

此程式碼將產生所需的輸出陣列,其中所有同名物件的值都會合併。

以上是如何使用共享鍵合併數組中的 JavaScript 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn