在javascript中为类似的json对象添加数量
Posted
技术标签:
【中文标题】在javascript中为类似的json对象添加数量【英文标题】:add qty for similar json objects in javascript 【发布时间】:2021-12-06 11:44:15 【问题描述】:我希望结果是对同一只猫的所有数量求和。
var data = [
cat: 'EK-1',name:"test",info:"mat", quantity: 3,
cat: 'EK-2', name:"test2",info:"nat"quantity: 1
];
我在下面尝试过这样的操作,我有一组具有一些相似对象的对象。如何添加数量和创建独特的对象。下面我给出了我尝试过的内容。
var data = [
cat: 'EK-1',
name: "test",
info: "mat",
quantity: 1
,
cat: 'EK-1',
name: "test",
info: "mat",
quantity: 1
,
cat: 'EK-1',
name: "test",
info: "mat",
quantity: 1
,
cat: 'EK-2',
name: "test2",
info: "nat",
quantity: 1
];
const products = Array.from(data.reduce((acc,
cat,
quantity
) =>
acc.set(cat, (acc.get(cat) || 0) + quantity),
new Map()
), ([cat, quantity]) => (
cat,
quantity
));
console.log(products);
【问题讨论】:
你试过reduce()吗? 很好,你有什么问题?你试过什么?你写了什么代码?您可以按照How to Ask 在此处提供minimal reproducible example 吗?你在哪里卡住?我们不是您的个人代码编写服务。 该属性称为quantity
,而不是qty
,就像您在reduce 的解构中访问一样。
我已经更新了我的问题,,但是我怎样才能得到结果中的所有键和值
var data = [ cat: 'EK-1', name: "test", info: "mat", 数量: 1 , cat: 'EK-1', name: "测试”,信息:“垫子”,数量:1 ,猫:'EK-1',名称:“测试”,信息:“垫子”,数量:1,猫:'EK-2',名称:“test2”,信息:“nat”,数量:1 ] const transform = (data) => data.reduce((p, cat, quantity ) => (p[cat] = (p[cat] || 0) + 数量, p), ) console.log(transform(data))
【参考方案1】:
您可以使用Array#reduce
执行此操作,使用累加器传递新对象:
var data = [ cat: "EK-1", name: "test", info: "mat", quantity: 1, , cat: "EK-1", name: "test", info: "mat", quantity: 1, , cat: "EK-1", name: "test", info: "mat", quantity: 1, , cat: "EK-2", name: "test2", info: "nat", quantity: 1, , ];
let seen = [];
const res = data.reduce((acc, cat, ...rest ) =>
const idx = seen.indexOf(cat);
if (idx == -1) (acc.push(cat, ...rest), seen.push(cat));
else acc[idx].quantity++;
return acc;
, []);
console.log(res);
【讨论】:
以上是关于在javascript中为类似的json对象添加数量的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 JavaScript 中为不可变对象添加属性吗?
在Javascript中为String对象添加trim,ltrim,rtrim