简体   繁体   English

javascript中相同对象名称的总和

[英]Sum of same object name in javascript

Hi friends I'm beginner for javascript how i sum same n no's of object name corresponding value and push the result to new array.see this is sample object 嗨,朋友们,我是javascript的初学者,我如何将相同的对象名称对应的值相加或否,并将结果推送到新的array.see这是示例对象

var obj_1 ={'delivered':10,'due':11,'team_name':'UK'}; var obj_2 ={'delivered':10,'due':11,'team_name':'US'}; var obj_nth ={'delivered':10,'due':11,'team_name':'UK'};

but i expect this output [UK:{'delivered':20,'due':22},US:{'delivered':10,'due':11}] ,so please help me what i'll do next 但我希望得到此输出[UK:{'delivered':20,'due':22},US:{'delivered':10,'due':11}] ,所以请帮我下一步

You can first create array of objects and then reduce() to return one object. 您可以先创建对象数组,然后用reduce()返回一个对象。

 var obj_1 ={'delivered':10,'due':11,'team_name':'UK'}; var obj_2 ={'delivered':10,'due':11,'team_name':'US'}; var obj_nth ={'delivered':10,'due':11,'team_name':'UK'}; var result = [obj_1, obj_2, obj_nth].reduce(function(r, e) { if(!r[e.team_name]) { r[e.team_name] = {delivered:0,due:0} } r[e.team_name].delivered += e.delivered r[e.team_name].due += e.due return r }, {}) console.log(result) 

const newArray = initialArray.map(({team_name, ...restProps}) => {
  return {
    [team_name]: {...restProps}
  };
});

See: 看到:

var obj_1 ={'delivered':10,'due':11,'team_name':'UK'};
var obj_2 ={'delivered':10,'due':11,'team_name':'US'};
var obj_nth ={'delivered':10,'due':11,'team_name':'UK'};

function sum_all() { 
    var sum={}; 
    for(var i=0;i<arguments.length;i++) { 
        obj = arguments[i]; 
        if (!sum[obj.team_name]) { 
            sum[obj.team_name]={'delivered':0,'due':0}; 
        } 
        sum[obj.team_name].delivered += obj.delivered; 
        sum[obj.team_name].due += obj.due;    
    } 
    return sum; 
}

var sum = sum_all(obj_1,obj_2,obj_nth);

console.log(sum);

Your console output will be: 您的控制台输出将是:

 sum Object UK: Object delivered: 20 due: 22 US: Object delivered: 10 due: 11 

Store these objects in an array , such as: 将这些对象存储在数组中 ,例如:

var myObjects = [
    {'delivered':10,'due':11,'team_name':'UK'},
    {'delivered':10,'due':11,'team_name':'US'},
    {'delivered':10,'due':11,'team_name':'UK'}
];

Create a new object in which you will store your results: 创建一个新对象,您将在其中存储结果:

var results = {};

Then iterate through the array with a for loop ( as it is generally faster ) and add the other properties according to team_name : 然后使用for循环遍历数组( 通常更快 ),并根据team_name添加其他属性:

for (var i = 0; i <= myObjects.length; i++) {
    if (typeof results[myObjects[i].team_name] !== undefined) {
        results[myObjects[i]].delivered += myObjects[i].delivered;
        results[myObjects[i]].due += myObjects[i].due; 
    } else {
        // Set 0 to these properties if the entry didn't exist
        results[myObjects[i]].delivered = 0;
        results[myObjects[i]].due = 0;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM