[英]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"
},
]
現在,我想通過將具有相同name
的value
組合到一個數組中來將此數組簡化為一個對象。 像這樣的東西-
{
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.