首页 > 解决方案 > 得到json值的总和

问题描述

我有 json 值,我找到了特定列 geo 和 salessale 的匹配。除此之外,我想接收 pipelinevalue 的总和。我想将“Proposal Submitted”和“close won”的管道值总和作为 tryFind。计数。现在我得到了价值 o

const data ={
   "pipeline":{
      "data":[
         {
            "UserName":"Jaison Clinton",
            "Geo":"NSU",
            "SalesStage":"Proposal Submitted",
            "PipelineValue":"3,54,000"
            
         },
         {
            "UserName":"Jaison Clinton",
            "Geo":"NSU",
            "SalesStage":"Proposal Submitted",
            "PipelineValue":"3,49,000"
         },
         {
            "UserName":"Kaviarasan Selvaraj",
            "Geo":"NSU",
            "SalesStage":"Proposal Submitted",
            "PipelineValue":"70,000"
         },
         {
            "UserName":"Vivek Sharma",
            "Geo":"NSU",
            "SalesStage":"close won",
            "PipelineValue":"13,45,000"
            
         }
      ]
   }
};
const result = data.pipeline.data.reduce((acc, lead) => {
    const tryFind = acc.find(l => l.Geo === lead.Geo && l.SalesStage === lead.SalesStage);
var PipelineValue=0;
    if (tryFind) {
        tryFind.count++;
        PipelineValue=PipelineValue+lead.PipelineValue;
    } else {
        acc.push({ Geo: lead.Geo, SalesStage: lead.SalesStage, count: 1 ,PipelineValue:PipelineValue});
    }

    return acc;
}, []);

console.log(result);

希望 popeline 值为 773,000(nsu geo '提案提交'的总和)和 13,45,000(nsu geo close won的总和)

标签: javascripthtmljqueryjson

解决方案


整个事情分为两行:

const result = data.pipeline.data.reduce((acc,lead)=> 
               (acc+=+lead.PipelineValue.replace(/,/g,''),acc), 0);

好的,已编辑,现在这是不同Geos 和SalesStages 的总和:

const data ={
   "pipeline":{
      "data":[
         {
            "UserName":"Jaison Clinton",
            "Geo":"NSU",
            "SalesStage":"Proposal Submitted",
            "PipelineValue":"3,54,000"
            
         },
         {
            "UserName":"Jaison Clinton",
            "Geo":"NSU",
            "SalesStage":"Proposal Submitted",
            "PipelineValue":"3,49,000"
         },
         {
            "UserName":"Kaviarasan Selvaraj",
            "Geo":"NSU",
            "SalesStage":"Proposal Submitted",
            "PipelineValue":"70,000"
         },
         {
            "UserName":"Vivek Sharma",
            "Geo":"NSU",
            "SalesStage":"close won",
            "PipelineValue":"13,45,000"
            
         }
      ]
   }
};
const result = Object.entries(data.pipeline.data.reduce((acc,cur) => { 
      let k=cur.Geo+'|'+cur.SalesStage;
      (acc[k]=acc[k] || []).push(+cur.PipelineValue.replace(/,/g,''))
      return acc}, {}))
    .map(e=>{
      let k=e[0].split('|'); 
      return {Geo:k[0],SalesStage:k[1],count:e[1].length,PipelineValue:e[1].reduce((a,c)=>a+c)} 
     });
console.log(result);

我首先使用 PipelineValues 收集单个数组,在最后.reduce()一部分中我得到它们的长度并将它们相加。


推荐阅读