Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript数组(NodeJs)中按(多个键)和多个属性值的总和进行分组_Javascript_Arrays_Object_Group By_Underscore.js - Fatal编程技术网

如何在javascript数组(NodeJs)中按(多个键)和多个属性值的总和进行分组

如何在javascript数组(NodeJs)中按(多个键)和多个属性值的总和进行分组,javascript,arrays,object,group-by,underscore.js,Javascript,Arrays,Object,Group By,Underscore.js,在javascript数组中,按(多个键)和多个属性值之和分组的最有效方法是什么 前- [ { Phase: "Phase 1", Step: "Step 1", Value1: "15", Value2: "5" }, { Phase: "Phase 1", Step: "Step 2", Value1: "20", Value2: &q

在javascript数组中,按(多个键)和多个属性值之和分组的最有效方法是什么

前-

[ 
    { Phase: "Phase 1", Step: "Step 1", Value1: "15", Value2: "5" },
    { Phase: "Phase 1", Step: "Step 2", Value1: "20", Value2: "10" },
    { Phase: "Phase 2", Step: "Step 1", Value1: "25", Value2: "15" },
    { Phase: "Phase 2", Step: "Step 2", Value1: "30", Value2: "20" },
    { Phase: "Phase 1", Step: "Step 1", Value1: "35", Value2: "25" },
    { Phase: "Phase 1", Step: "Step 2", Value1: "40", Value2: "30" },
    { Phase: "Phase 2", Step: "Step 1", Value1: "45", Value2: "35" },
    { Phase: "Phase 2", Step: "Step 2", Value1: "50", Value2: "40" }
]
预期产量

[ 
    { Phase: "Phase 1", Step: "Step 1", Value1: "50", Value2: "30" },
    { Phase: "Phase 1", Step: "Step 2", Value1: "60", Value2: "40" },
    { Phase: "Phase 2", Step: "Step 1", Value1: "70", Value2: "50" },
    { Phase: "Phase 2", Step: "Step 2", Value1: "80", Value2: "60" }
]

您可以使用
reduce
并获取对象的

var数组=[{阶段:“阶段1”、步骤:“步骤1”、值1:“15”、值2:“5”}、{阶段:“阶段1”、步骤2、值1:“20”、值2:“10”}、{阶段:“阶段2”、步骤:“步骤1”、值1:“25”、值2:“15”}、{阶段:“阶段2”、步骤:“步骤:“步骤2”、值1:“30”、值2:“20”}、{阶段:“阶段:“阶段1”、步骤:“步骤1”、值1:“35”、值2:“25”},{阶段:“第一阶段”,步骤:“第二步”,数值1:“40”,数值2:“30”},{阶段:“第二阶段”,步骤:“第一步”,数值1:“45”,数值2:“35”},{阶段:“第二阶段”,步骤:“第二步”,数值1:“50”,数值2:“40”};
var result=Object.values(array.reduce((acc,{Value1,Value2,…rest})=>{
const key=Object.values(rest.join(“|”);
acc[key]=acc[key]|{…rest,Value1:0,Value2:0};
acc[键].Value1+=+Value1;
acc[键].Value2+=+Value2;
返回acc;
},{}));

console.log(result);
您可以使用
reduce
并获取
对象。对象的值

var数组=[{阶段:“阶段1”、步骤:“步骤1”、值1:“15”、值2:“5”}、{阶段:“阶段1”、步骤2、值1:“20”、值2:“10”}、{阶段:“阶段2”、步骤:“步骤1”、值1:“25”、值2:“15”}、{阶段:“阶段2”、步骤:“步骤:“步骤2”、值1:“30”、值2:“20”}、{阶段:“阶段:“阶段1”、步骤:“步骤1”、值1:“35”、值2:“25”},{阶段:“第一阶段”,步骤:“第二步”,数值1:“40”,数值2:“30”},{阶段:“第二阶段”,步骤:“第一步”,数值1:“45”,数值2:“35”},{阶段:“第二阶段”,步骤:“第二步”,数值1:“50”,数值2:“40”};
var result=Object.values(array.reduce((acc,{Value1,Value2,…rest})=>{
const key=Object.values(rest.join(“|”);
acc[key]=acc[key]|{…rest,Value1:0,Value2:0};
acc[键].Value1+=+Value1;
acc[键].Value2+=+Value2;
返回acc;
},{}));
console.log(结果);
const data=[{阶段:“阶段1”、步骤:“步骤1”、值1:“15”、值2:“5”}、{阶段:“阶段1”、步骤2、值1:“20”、值2:“10”}、{阶段:“阶段2”、步骤:“步骤1”、值1:“25”、值2:“15”}、{阶段:“阶段2”、步骤:“步骤:“步骤2”、值1:“30”、值2:“20”}、{阶段:“阶段:“阶段1”、步骤:“步骤:“步骤1”、值1:“35”、值2:“25”}、{阶段:“步骤:“步骤2”、值1:“步骤:“40”、值2:“30”},{阶段:“阶段2”,步骤:“步骤1”,值1:“45”,值2:“35”},{阶段:“阶段2”,步骤:“步骤2”,值1:“50”,值2:“40”}]
const finalResult=数据。reduce((结果,d)=>{
让key=`d.Phase}{d.Step}`;
结果[键]=结果[键]|{…d,值1:0,值2:0};
结果[key].Value1+=+d.Value1;
结果[键].Value2+=+d.Value2
返回结果
}, {})
console.log(Object.values(finalResult))
const data=[{Phase:“Phase 1”,Step:“Step 1”,Value1:“15”,Value2:“5”},{Phase:“Phase 1”,Step:“Step 2”,Value1:“20”,Value2:“10”},{Phase:“Phase 2”,Step:“Step 2”,Step:“Step 2”,Value1:“30”,Value2:“20”},{Phase:“Phase:“Phase:“Phase 1”,Step:“Step:“Step 1”,Value1:“35”,Value2:“25”},{Phase:“Phase:“Phase 1”,Step:“Step:“Step:“Step 2:“Step 2”,ste30“},{阶段:“阶段2”,步骤:“步骤1”,值1:“45”,值2:“35”},{阶段:“阶段2”,步骤:“步骤2”,值1:“50”,值2:“40”}]
const finalResult=数据。reduce((结果,d)=>{
让key=`d.Phase}{d.Step}`;
结果[键]=结果[键]|{…d,值1:0,值2:0};
结果[key].Value1+=+d.Value1;
结果[键].Value2+=+d.Value2
返回结果
}, {})
console.log(Object.values(finalResult))