[英]Convert array of objects into a single object
I have the following array for example -例如,我有以下数组 -
[
{
name: "abc",
value: "1"
},
{
name: "xyz",
value: "2"
},
{
name: "abc",
value: "3"
},
{
name: "abc",
value: "4"
},
{
name: "xyz",
value: "5"
},
]
Now, I want to reduce this array into a single object by grouping value
with the same name
together into an array.现在,我想通过将具有相同
name
的value
组合到一个数组中来将此数组简化为一个对象。 Something like this -像这样的东西-
{
abc: [1, 3, 4],
xyz: [2, 5]
}
How do I do this using reduce
in JavaScript?如何在 JavaScript 中使用
reduce
?
I'm not sure if this the right approach but I have tried something like this and it doesn't give me the desired output.我不确定这是否是正确的方法,但我已经尝试过类似的方法,但它并没有给我想要的输出。
const data = arr.reduce((acc, item) => {
return {
...acc,
[item.name]: [item.value, acc[item.value]]
};
});
You were on the right track with your answer, but you need to check if acc
already has a key of item.name
:你的答案是正确的,但你需要检查
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)
Note you can use object destructuring to simplify the accumulation code.请注意,您可以使用对象解构来简化累积代码。
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);
Just parse values if you need in string to number and it will give you answer如果您需要将字符串解析为数字,只需解析值,它会给您答案
{
abc: [1, 3, 4],
xyz: [2, 5]
}
You can group the array using Array.prototype.reduce .您可以使用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
takes some time to getting used to, but it's fairly simple once it clicks. reduce
需要一些时间来适应,但是一旦点击它就相当简单了。 You can also group the array using a simple for...of
loop.您还可以使用简单
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);
Other relevant documentations:其他相关文件:
Use reduce()
:使用
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.