在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 中为不可变对象添加属性吗?

jq 在 json 对象中为字符串添加前缀

在Javascript中为String对象添加trim,ltrim,rtrim

如何在 JavaScript 中为自定义对象创建方法?

在 JavaScript 中通过 JSON 对象进行类似 Lucene 的搜索

如何在JavaScript中为IE8添加非可枚举属性?