2016-08-19 3 views
2

Ist es möglich, einzelne Eigenschaft von Array von Objekten wieScheibe Eigenschaften von Objekten und Zählen

[{"name":"Bryan","id":016, "counter":0}, {"name":"John","id":04, "counter":2}, {"name":"Alicia","id":07, "counter":6}, {"name":"Jenny","id":015, "counter":9}, {"name":"Bryan","id":016, "counter":0}, {"name":"Jenny","id":015, "counter":9}, {"name":"John","id":04, "counter":2}, {"name":"Jenny" ,"id":015, "counter":9}]; 

Ich versuche zu schneiden name von jedem Objekt und zählen Anzahl der gleichen Elemente (es gibt drei Objekte in Scheiben schneiden mit dem Namen Jenny), um die folgende Struktur zu erreichen:

[{"name":"Bryan","Number":2}, 
{"name":"John","Number":2}, 
{"name":"Alicia","Number":1}, 
{"name":"Jenny","Number":3}] 
+1

Hallo Cory, ja, es ist möglich. Was hast du bisher versucht? – nils

Antwort

1

Sie eine Hash-Tabelle als Referenz verwenden könnten die gezählten Namen.

var data = [{ name: "Bryan", id: "016", counter: 0 }, { name: "John", id: "04", counter: 2 }, { name: "Alicia", id: "07", counter: 6 }, { name: "Jenny", id: "015", counter: 9 }, { name: "Bryan", id: "016", counter: 0 }, { name: "Jenny", id: "015", counter: 9 }, { name: "John", id: "04", counter: 2 }, { name: "Jenny", id: "015", counter: 9 }], 
 
    grouped = []; 
 

 
data.forEach(function (a) { 
 
    if (!this[a.name]) { 
 
     this[a.name] = { name: a.name, Number: 0 }; 
 
     grouped.push(this[a.name]); 
 
    } 
 
    this[a.name].Number++; 
 
}, Object.create(null)); 
 

 
console.log(grouped);

2

Haben Sie ignorieren wollen die id und counter Requisiten bereits vorhanden?

Sie ein Objekt erstellen, könnte den Überblick über die eindeutigen Namen zu halten, und wandle in dem Ende zu einem Array zurück:

var data = [{"name": "Bryan", "id": 016, "counter": 0}, { "name": "John", "id": 04, "counter": 2}, { "name": "Alicia", "id": 07, "counter": 6}, { "name": "Jenny", "id": 015, "counter": 9}, { "name": "Bryan", "id": 016, "counter ": 0}, { "name": "Jenny", "id": 015, "counter ": 9}, { "name": "John", "id": 04, "counter": 2}, { "name": "Jenny", "id": 015, "counter": 9}]; 
 

 
var result = data.reduce(function(result, item) { 
 
    if (!result[item.name]) { 
 
    result[item.name] = { 
 
     name: item.name, 
 
     counter: 0 
 
    }; 
 
    } 
 

 
    result[item.name].counter += 1; 
 
    
 
    return result; 
 
}, {}); 
 

 
console.log(Object.keys(result).map(function(key) { return result[key] }));

1

dieses Geben Sie ein Schuss. Wir erstellen ein Wörterbuch mit Namen mit ihren Zählern nameDict und durchlaufen die Liste, um sie zu zählen.

var arr = [{"name":"Bryan","id":"016", "counter":0}, {"name":"John","id":"04", "counter":2}, {"name":"Alicia","id":"07", "counter":6}, {"name":"Jenny","id":"015", "counter":9}, {"name":"Bryan","id":"016", "counter":0}, {"name":"Jenny","id":"015", "counter":9}, {"name":"John","id":"04", "counter":2}, {"name":"Jenny","id":"015", "counter":9}]; 
 
var nameDict = {}; 
 

 
for(var i = 0; i < arr.length; i++) 
 
{ 
 
    var name = arr[i].name; 
 
    if(nameDict[name] == undefined){ 
 
     //haven't encountered this name before so we need to create a new entry in the dict 
 
     nameDict[name] = 1 
 
    } else { 
 
     //otherwise increment the count 
 
     nameDict[name] += 1 
 
    } 
 
} 
 

 
console.log(JSON.stringify(nameDict));

Verwandte Themen