Javascript 如何减少对象中的元素?

Javascript 如何减少对象中的元素?,javascript,reactjs,Javascript,Reactjs,我有一个这样的物体: result: > rows: > 0: {key: Array(4), value: 3} > key: (4) ["Person", "2020-06-24", "Product, "00000000008"] value: 3 > 1: {key: Array(4), value: 10}

我有一个这样的物体:

result: 
     > rows:
       > 0: {key: Array(4), value: 3}
          > key: (4) ["Person", "2020-06-24", "Product, "00000000008"]
            value: 3
       > 1: {key: Array(4), value: 10}
          > key: (4) ["Person", "2020-06-25", "Product, "00000000009"]
            value: 10
       > 2: {key: Array(4), value: 10}
          > key: (4) ["Person", "2020-06-25", "Product, "00000000008"]
            value: 10
现在,我需要做的是减少对相同代码(例如0000000000 8)的结果检查,并对值求和,以获得:

(例如)

现在,我的问题是如何做,我尝试先使用map,然后使用reduce,但我不明白如何检查相同的代码并求和值

我该怎么办

我试过这种方法,但不起作用:

res
是具有值的对象

let example = res.rows.map((element)=> {
        console.log("ELEMENT IS ", element)
        let example1 = element.key[3].reduce(function(element, v){
          if(ref.hasOwnProperty(v))
            element[ref[v]] += v;
          else {
            ref[v] = element.length;
            element.push(prev = v)
          }
          return element
        }, [])
      })
      console.log("element", element)

创建自己的hashmap,并针对所有值在结果对象上循环一次

const hashmap = {};

rows.forEach(v => {
  hashmap[v.product] = (hashmap[v.product] || 0) + v.value;
});

// then are you able to access any product value on O(1)
const total = hashmap['00000000008'];

console.log({total});
// total: 13

创建自己的hashmap,并针对所有值在结果对象上循环一次

const hashmap = {};

rows.forEach(v => {
  hashmap[v.product] = (hashmap[v.product] || 0) + v.value;
});

// then are you able to access any product value on O(1)
const total = hashmap['00000000008'];

console.log({total});
// total: 13

Array.map
方法对于数据转换很有用,但是如果必须聚合,则成本通常会很高,因为还必须
Array.filter
非聚合值

您可以使用来构建自己的对象:

让结果={
行:[
{
关键词:[“人”,“2020-06-24”,“产品”,“0000000000 8”],
价值:3
},
{
关键词:[“人”,“2020-06-25”,“产品”,“0000000000 9”],
数值:10
},
{
关键词:[“人”,“2020-06-25”,“产品”,“0000000000 8”],
数值:10
}
]
}
让output1=result.rows.reduce((acc,current)=>{
让key=current.key[3];
//向累加器添加值
acc[键]=(acc[键]| 0)+当前值;
返回acc;
}, {});
控制台日志(output1);
让output2=result.rows.reduce((acc,current)=>{
//检查密钥是否已存在
let found=acc.find(v=>v.key==current.key[3])
//如果是,则更新当前值
如果(找到){
found.value+=当前.value;
}
//否则,创建一个新的
否则{
acc.push({key:current.key[3],value:current.value});
}
返回acc;
}, []);

console.log(output2)
对于数据转换,
Array.map
方法很有用,但是如果必须进行聚合,则开销很大,因为还必须对未聚合的值进行
Array.filter
过滤

您可以使用来构建自己的对象:

让结果={
行:[
{
关键词:[“人”,“2020-06-24”,“产品”,“0000000000 8”],
价值:3
},
{
关键词:[“人”,“2020-06-25”,“产品”,“0000000000 9”],
数值:10
},
{
关键词:[“人”,“2020-06-25”,“产品”,“0000000000 8”],
数值:10
}
]
}
让output1=result.rows.reduce((acc,current)=>{
让key=current.key[3];
//向累加器添加值
acc[键]=(acc[键]| 0)+当前值;
返回acc;
}, {});
控制台日志(output1);
让output2=result.rows.reduce((acc,current)=>{
//检查密钥是否已存在
let found=acc.find(v=>v.key==current.key[3])
//如果是,则更新当前值
如果(找到){
found.value+=当前.value;
}
//否则,创建一个新的
否则{
acc.push({key:current.key[3],value:current.value});
}
返回acc;
}, []);
console.log(输出2)