2017-01-24 4 views
1

Hallo Freunde, die ich Anfänger für javascript bin, wie ich gleiche Summe n Neins von Objektnamen Wert entspricht, und das Ergebnis zu neuen array.see schieben Dies ist ein BeispielobjektSumme der gleichen Objektnamen in Javascript

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'};

aber ich erwarte diese Ausgabe [UK:{'delivered':20,'due':22},US:{'delivered':10,'due':11}], also bitte helfen Sie mir, was ich als nächstes tun werde

+0

diejenigen Objekte, die in einem Array gespeichert werden? Oder ist es nur eine andere Variable? – Weedoze

+1

Code eingeben Was Sie versucht haben. –

+0

ja diese obj speichern in einem Array – skvj

Antwort

3

Sie können zunächst Array von Objekten erstellen und dann reduce(), um ein Objekt zurückzugeben.

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)

+0

Warum 'concat' und nicht einfach' [o1, o2, o3] '? – edc65

+0

@ edc65 Gute Idee, danke. –

0
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); 

Ihre Konsole ausgegeben wird:

sum 
Object 
    UK: Object 
     delivered: 20 
     due: 22 

    US: Object 
     delivered: 10 
     due: 11 
0

Bewahren Sie diese Objekte in einem array, wie zum Beispiel:

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

Erstellen Sie ein neues Objekt, in dem Sie speichern Ihre Ergebnisse:

var results = {}; 

dann mit einer for-Schleife (as it is generally faster) und fügen die anderen Eigenschaften nach team_name durch das Array iterieren:

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; 
    } 
} 
Verwandte Themen