javascript - 如何根据 id 减少对象数组
问题描述
预期输出:
[{id: 1, atributo: {id: 20}, valor: 1753,96},
{id: 2, atributo: {id:21}, valor: 1520}]
我有这个对象数组:
myArr = [{id: 21852, atributo: {id: 20}, valor: "876.98"},
{id: 21853, atributo: {id:21}, valor: "760"},
{id: 21858, atributo: {id:20}, valor: "876.98"},
{id: 21859, atributo: {id:21}, valor: "760"}]
我想在“atributo”中对具有相同 id 的数组进行分组,并对“valor”的值求和。
我尝试了这样的事情:
const agroup = myArr.reduce(function(a, b) {
if (a && a.atributo.id === b.atributo.id) {
return a + Number(b.valor);
} else {
return { ...a };
}
});
解决方案
试试这个。您寻找现有的条目,如果找到,您总结valor
属性值:
const myArr = [{id: 21852, atributo: {id: 20}, valor: "876.98"},
{id: 21853, atributo: {id:21}, valor: "760"},
{id: 21858, atributo: {id:20}, valor: "876.98"},
{id: 21859, atributo: {id:21}, valor: "760"}];
const res = myArr.reduce((res, curr) => {
const existing = res.find((e) => e.atributo.id === curr.atributo.id);
if (existing) {
existing.valor = +existing.valor + +curr.valor;
} else {
res.push(curr);
}
return res;
}, []);
console.log(res);
推荐阅读
- html - 在条形图中添加垂直滚动条(chartjs)
- java - 循环遍历 JTree 中节点的所有父节点
- java - 参数化类型的快捷方式?
- java - 在 Apache Olingo 中初始化 ODataSingleProcessor 的问题
- javascript - HTTP PUT使用 Fetch API 与 ` ` 标签的 `src` 属性关联的文件
- jquery - Google WebApp API 调用不返回 JSON
- d3.js - 为什么 Cytoscape.js 会阻止跨域图像请求,但 d3.js 不会?
- r - 试图将我的头围绕索引到一个小标题列表中
- angular - 如何为通用组件提供更具体的组件以在 Angular 7 中进行渲染
- c++ - 如何获得对 range-v3 视图的基础向量条目的写访问权限并将另一个视图的值分配给它?