2016-06-06 9 views
0

Ich habe einige Daten, die ich brauche einige Berechnungen zu tun/Manipulation auf:Hinzufügen von Daten in einem Array

data=[{"sex":"M","age":"0","pop":"310"}, 
{"sex":"M","age":"5","pop":"306"}, 
{"sex":"M","age":"10","pop":"313"}, 
{"sex":"M","age":"15","pop":"332"}, 
.... 
{"sex":"M","age":"100","pop":"4"}, 
{"sex":"W","age":"0","pop":"294"}, 
{"sex":"W","age":"5","pop":"291"}, 
{"sex":"W","age":"10","pop":"300"}, 
{"sex":"W","age":"15","pop":"318"}, 
.... 
{"sex":"W","age":"100","pop":"1"} 
] 

I extrahieren, um die Subdaten für männliche (M) und für weibliche (W):

var male=data.filter(function(d){ 
if (data.sex=="M"){return d.pop;} 
}) 
var female=data.filter(function(d){ 
if (data.sex=="F"){return d.pop;} 
}) 
Jetzt

, würde Ich mag die Bevölkerung (pop) für beiderlei Geschlechts berechnen, dh eine neue Variable erstellen namens „beide“ enthalten, bezüglich der variablen „Alter“:

both=[{"sex":"MW","age":"0","pop":"604"}, 
{"sex":"MW","age":"5","pop":"597"}, 
{"sex":"MW","age":"10","pop":"613"}, 
{"sex":"MW","age":"15","pop":"650", 
.... 
{"sex":"MW","age":"100","pop":"5"} 
] 

Wie mache ich das?

+0

Ihre Frage hat nichts mit JSON zu tun. JSON ist eine * textuelle Notation * für den Datenaustausch. Wenn Sie mit JavaScript-Quellcode arbeiten und sich nicht mit einem * string * befassen, handelt es sich nicht um JSON. –

Antwort

2

Es klingt, als ob Sie die M- und W-Einträge in einem einzigen Eintrag mit einem kombinierten Wert von pop nach Alter kombinieren möchten. Wenn ja, müssen Sie eine Karte der Einträge nach Alter erstellen und fügen Sie die pop s zusammen, was Sie ziemlich einfach in ES5 mit einem Objekt tun können (in ES2015   aka "ES6"   — würden Sie wahrscheinlich eine Map verwenden). Dann konvertieren Sie es zurück in ein Array, wenn Sie fertig sind. Siehe Anmerkungen:

// Your data -- note that I've fixed the pop values, if they're 
 
// meant to be numbers, they shouldn't be in quotes 
 
var data = [ 
 
    {"sex":"M","age":"0","pop":310}, 
 
    {"sex":"M","age":"5","pop":306}, 
 
    {"sex":"M","age":"10","pop":313}, 
 
    {"sex":"M","age":"15","pop":332}, 
 
    {"sex":"M","age":"100","pop":4}, 
 
    {"sex":"W","age":"0","pop":294}, 
 
    {"sex":"W","age":"5","pop":291}, 
 
    {"sex":"W","age":"10","pop":300}, 
 
    {"sex":"W","age":"15","pop":318}, 
 
    {"sex":"W","age":"100","pop":1} 
 
]; 
 

 
// Create the "map" of entries by age: 
 
var byAge = Object.create(null); 
 
data.forEach(function(entry) { 
 
    // Get the entry for this age, if any 
 
    var ageEntry = byAge[entry.age]; 
 
    if (!ageEntry) { 
 
     // None, create and add it with an initial pop of 0 
 
     ageEntry = byAge[entry.age] = {sex: "MW", age: entry.age, pop: 0}; 
 
    } 
 
    
 
    // Add in the pop for this entry 
 
    ageEntry.pop += entry.pop; 
 
}); 
 

 
// Convert it back into an array (if you want): 
 
var result = Object.keys(byAge).map(function(key) { 
 
    return byAge[key]; 
 
}); 
 

 
// Show result: 
 
console.log(result);

+1

Ja !! Es ist genau das, was ich brauche. Vielen Dank – user2129506

0

Es klingt wie die Verringerung Methode für funktionieren würde, was Sie brauchen.

`var population = ARR.reduce(function(a, b) { 
     return Number(a.pop) + Number(b.pop); 
});` 

Beachten Sie, dass die Stringdarstellung der Bevölkerung zu einer Reihe werfen müssen, oder es wird verkettet werden.

1

var data = [ 
 
    {"sex":"M","age":"0","pop":310}, 
 
    {"sex":"M","age":"5","pop":306}, 
 
    {"sex":"M","age":"10","pop":313}, 
 
    {"sex":"M","age":"15","pop":332}, 
 
    {"sex":"M","age":"100","pop":4}, 
 
    {"sex":"W","age":"0","pop":294}, 
 
    {"sex":"W","age":"5","pop":291}, 
 
    {"sex":"W","age":"10","pop":300}, 
 
    {"sex":"W","age":"15","pop":318}, 
 
    {"sex":"W","age":"100","pop":1} 
 
]; 
 
var ages=[] 
 
for(var i=0;i<data.lenght;i++){ 
 
    if(!ages[data[i]['age']]){ 
 
     ages[data[i]['age']].push({"sex": "MW", "age": data[i]['age'], "pop":data[i]['pop'] }) 
 
    }else{ 
 
     ages[data[i]['age']].pop +=data[i]['pop'] 
 
    } 
 
}

Verwandte Themen