簡體   English   中英

將對象數組轉換為單個對象

[英]Convert array of objects into a single object

例如,我有以下數組 -

[
  {
    name: "abc",
    value: "1"
  },
  {
    name: "xyz",
    value: "2"
  },
  {
    name: "abc",
    value: "3"
  },
  {
    name: "abc",
    value: "4"
  },
  {
    name: "xyz",
    value: "5"
  },
]

現在,我想通過將具有相同namevalue組合到一個數組中來將此數組簡化為一個對象。 像這樣的東西-

{
  abc: [1, 3, 4],
  xyz: [2, 5]
}

如何在 JavaScript 中使用reduce

我不確定這是否是正確的方法,但我已經嘗試過類似的方法,但它並沒有給我想要的輸出。

const data = arr.reduce((acc, item) => {
  return {
    ...acc,
    [item.name]: [item.value, acc[item.value]]
  };
});

你的答案是正確的,但你需要檢查acc是否已經有item.name的鍵:

 const data = [{ name: "abc", value: "1" }, { name: "xyz", value: "2" }, { name: "abc", value: "3" }, { name: "abc", value: "4" }, { name: "xyz", value: "5" }, ] const result = data.reduce((acc, { name, value }) => ({ ...acc, [name] : [...(acc[name] || []), value] }), {}) console.log(result)

請注意,您可以使用對象解構來簡化累積代碼。

 const data=[ { name: "abc", value: "1" }, { name: "xyz", value: "2" }, { name: "abc", value: "3" }, { name: "abc", value: "4" }, { name: "xyz", value: "5" }, ]; const res=data.reduce((a,c)=>{ (a[c.name]??=[]).push(c.value); return a; },{}); console.log(res);

 const data = [{ name: "abc", value: "1" }, { name: "xyz", value: "2" }, { name: "abc", value: "3" }, { name: "abc", value: "4" }, { name: "xyz", value: "5" }, ]; let finalObject = {}; data.forEach((item) => { if (!finalObject.hasOwnProperty(item.name)) { finalObject[item.name] = [item.value]; } else { finalObject[item.name].push(item.value); } }); console.log(finalObject);

如果您需要將字符串解析為數字,只需解析值,它會給您答案

{
  abc: [1, 3, 4],
  xyz: [2, 5]
}

您可以使用Array.prototype.reduce對數組進行分組。

 const data = [ { name: "abc", value: "1" }, { name: "xyz", value: "2" }, { name: "abc", value: "3" }, { name: "abc", value: "4" }, { name: "xyz", value: "5" }, ], result = data.reduce((r, o) => ((r[o.name] ??= []).push(o.value), r), {}); console.log(result);

reduce需要一些時間來適應,但是一旦點擊它就相當簡單了。 您還可以使用簡單for...of循環對數組進行分組。

 const data = [ { name: "abc", value: "1" }, { name: "xyz", value: "2" }, { name: "abc", value: "3" }, { name: "abc", value: "4" }, { name: "xyz", value: "5" }, ]; const result = {}; for (let d of data) { (result[d.name] ??= []).push(d.value); } console.log(result);

其他相關文件:

使用reduce()

 const arr = [ { name: "abc", value: "1" }, { name: "xyz", value: "2" }, { name: "abc", value: "3" }, { name: "abc", value: "4" }, { name: "xyz", value: "5" }, ] const data = arr.reduce((a,c) => ({...a, [c.name]: a[c.name] ? [...a[c.name], c.value] : [c.value]}),{}) console.log(data)

暫無
暫無

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

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