2016-08-09 86 views
0

Ich möchte das folgende Array nehmen und alle eindeutigen Werte von "Obst" identifizieren und die entsprechenden Zählungen für diese Früchte identifizieren.Wie gruppiere ich ein Array auf einem Attribut, um den aggregierten Wert jeder Gruppe mit einem bestimmten Schlüssel mithilfe von JavaScript zu erreichen?

Zum Beispiel, wir wissen, dass es drei Früchte (Äpfel, Bananen und Kirschen) gibt und dass wir 2 Äpfel, 10 Bananen und 5 Kirschen haben.

var input_data = [{"count":1,"fruit":"apple"},{"count":1,"fruit":"apple"},{"count":10,"fruit":"banana"},{"count":5,"fruit":"cherry"}] 

auf dem obigen Eingang Basierend, würde Ich mag die folgenden Ausgaben erreichen:

desired_output_1 = ['apple','banana','cherry'] 

desired_output_2 = [2,10,5] 

ich in der Lage war, mit der folgenden Funktion zu erhalten desired_output_1, die ich von Underscore.js verwendet, aber ich bin mir nicht sicher, wie man sited_output_2 erreichen kann.

Als Ergebnis möchte ich wirklich einen Weg zu erreichen [2,10,5] basierend auf zählen für die oben genannten.

Antwort

0
var input_data = [{"count":1,"fruit":"apple"},{"count":1,"fruit":"apple"},{"count":10,"fruit":"banana"},{"count":5,"fruit":"cherry"}]; 

var fruits = []; 
var counts = []; 

for (var i in input_data) { 
    var index = fruits.indexOf(input_data[i].fruit); 
    if (index == -1) { 
     fruits.push(input_data[i].fruit) 
     counts.push(input_data[i].count); 
    } else { 
     counts[index] += input_data[i].count; 
    } 
} 

console.log(fruits, counts); 
0

var data = [{ 
 
    "count": 1, 
 
    "fruit": "apple" 
 
}, { 
 
    "count": 1, 
 
    "fruit": "apple" 
 
}, { 
 
    "count": 10, 
 
    "fruit": "banana" 
 
}, { 
 
    "count": 5, 
 
    "fruit": "cherry" 
 
}]; 
 

 
var fruits = []; 
 
var counts = []; 
 
for (var i in data) { 
 
    var index = fruits.indexOf(data[i].fruit); 
 
    if (index == -1) { 
 
     fruits.push(data[i].fruit) 
 
     counts.push(data[i].count); 
 
    } else { 
 
     counts[index] = counts[index] + data[i].count; 
 
    } 
 
} 
 

 
console.log(fruits , counts);

0

Sie müssen möglicherweise nicht Strich/lodash :)

var input_data = [ 
 
     {"count":1,"fruit":"apple"}, 
 
     {"count":1,"fruit":"apple"}, 
 
     {"count":10,"fruit":"banana"}, 
 
     {"count":5,"fruit":"cherry"} 
 
    ]; 
 
    
 
    
 
    var result = input_data.reduce(function (acc, current) { 
 
     if(!acc[current.fruit]) { 
 
     acc[current.fruit] = 0; 
 
     } 
 
     acc[current.fruit] += current.count; 
 
     return acc; 
 
    }, {}); 
 
    
 
    console.log(result);

Ausgang ist ein Objekt anstelle von zwei Arrays. Dies wird die Frucht behalten < -> count relation.