2016-12-22 5 views
1

Ich habe versucht herauszufinden, wie man ein Array in ein Array mit Objekten verwandelt.Ein Array in ein Array mit Objekten verwandeln

zum Beispiel ich eine JSON-Datei mit und die JSON-Datei zu starten haben sieht sorta wie diese

var data=[{"tasknumber":304030, 
     "date":"2012-05-05", 
     "operator":"john doe"}, 
     {"tasknumber":23130, 
     "date":"2012-07-07", 
     "operator":"john doeeeeeeee"}, 
     {"tasknumber":233330, 
     "date":"2012-08-08", 
     "operator":"john doe"}] 

so angelegt ich die _.countBy Funktion, die innerhalb der Underscore.js Bibliothek ist und ich bekomme ein Objekt wie dieses

{"john doe":2,"john doeeeeeeee":1} 

ive versucht, herauszufinden, wie man diese mit Objekten in ein Array drehen, so dass es in etwa so aussehen würde, aber ich habe in jedem Versuch gescheitert, und ich weiß nicht, war starten

[{operator:"john doe", 
count: 2}, 
{operator: "john doeeeeeeee", 
count:1}] 

Ich habe ein paar Dinge ausprobiert, aber alles, was ich bekomme, ist Tragödie und alles bricht, weiß jemand, ob es irgendwelche Librarys oder irgendetwas gibt, das mit so etwas helfen könnte?

+2

'{ "John Doe": 2, "john doeeeeeeee": 1}' ist –

Antwort

3

Angesichts der Objekt (nicht-Array) {"john doe":2,"john doeeeeeeee":1} als Eingabe Sie Ihre gewünschte Ausgabe wie folgt zu erreichen:

var input = {"john doe":2,"john doeeeeeeee":1}; 
 

 
var output = Object.keys(input).map(function(k) { 
 
    return { 
 
    operator: k, 
 
    count: input[k] 
 
    }; 
 
}); 
 

 
console.log(output);

Oder mit ES6 Pfeil Funktion Syntax:

var input = {"john doe":2,"john doeeeeeeee":1}; 
 

 
var output = Object.keys(input).map((k) => ({ operator: k, count: input[k] })); 
 

 
console.log(output);

(Beachten Sie, dass Unders wahrscheinlich einen noch kürzeren Weg bietet, dies zu tun, aber ich bin nicht vertraut mit Unders so dass ich eine einfache JS Lösung nur gegeben haben.)

Weiterführende Literatur:

+0

kein Array-Objekt, wenn ich dies meiner Zählung laufen eine undefinierte –

+0

Nun kehrt das "Ausführen ..." Taste zeigt, dass meine Code funktioniert für das "{" john doe ": 2," john doeeeeeeee ": 1}' Objekt, das du in deiner Frage gezeigt hast.Ich kann nicht sagen, was falsch ist, wenn du es ausprobiert hast, ohne genau zu sehen, was du getan hast. – nnnnnn

+0

Vielen Dank für die Hilfe, imma sehen, wenn ich diesen Fehler beheben kann, aber Sie mir drastisch geholfen haben –

0

Ihre erste Datenarray gegeben, können Sie einfach diese laufen:

var data=[{"tasknumber":304030, 
"date":"2012-05-05", 
"operator":"john doe"}, 
{"tasknumber":23130, 
"date":"2012-07-07", 
"operator":"john doeeeeeeee"}, 
{"tasknumber":233330, 
"date":"2012-08-08", 
"operator":"john doe"}]; 

Funktionsdefinition

const count = data => { 
    // get data in format like _.countBy 
    const o = data.map(x => x.operator).reduce((acc, cur) => { acc[cur] ? acc[cur] += 1 : acc[cur] = 1; return acc; }, {}); 
    // transform object into array of object 
    return Object.keys(o).map(operator => ({operator, count: o[operator]})); 
}; 

-Test durch Ausgabe

console.log(count(data)); 
0

Hier produzieren ist eine nicht getestete Unterstreichungs Ansatz, nimmt Ihre Anfangswerte werden aus der JSON-Datei geladen und direkt in das gewünschte Ausgabeformat konvertiert:

_.chain(input) 
.groupBy(function(entry) { return entry.operator }) 
.map(function(entries, operator) { 
     return { 
      operator: operator, 
      count: entries.length 
     } 
     }) 
.value(); 
Verwandte Themen