2010-10-28 6 views
2

J'ai un objet javascript dans un dictionnaire qui ressemble à ceci:Somme Javascript Object

{ date: "2010/01", San_Francisco201001: 1, San_Francisco201002: 2, San_Francisco201003: 3, }, { date: "2010/02", San_Francisco201001: 0, San_Francisco201002: 1, San_Francisco201003: 2, }

et je voudrais trouver

{ date: "2010/01", sum: 6,), { date: "2010/02", sum: 3,)

Il devient un peu délicat, parce que les noms de propriété sont arbitraires. Toute idée de comment s'y prendre?

Merci.

+4

virgules sont Trailing non non. – epascarello

+0

Donc, tout sauf la date devrait être ajouté? – some

+0

J'ai supprimé la balise json, car cela n'a rien à voir avec JSON. – Guffa

Répondre

3

Ce n'est pas un objet, c'est deux objets. Je suppose que vous les avez dans un tableau. Ensuite, vous pouvez boucle à travers le réseau, et la boucle à travers les propriétés de chaque objet:

var result = []; 
for (var i = 0; i < theArray.length; i++) { 
    var sum = 0; 
    for (var key in theArray[i]) { 
    if (key != 'date') { 
     sum += theArray[i][key]; 
    } 
    } 
    result.push({ date: theArray[i].date, sum: sum }); 
} 
0

Pour trouver la somme d'une valeur date particulière, créer une fonction avec un corps comme celui-ci:

function getDate(date, arr) { 
    for(var i = arr.length; i--;) { 
     if(arr[i].date === date) { 
      var obj = { sum: 0; }; 
      for(var prop in arr[i]) { 
       if(prop !== "date") { 
        obj.sum += arr[i][prop]; 
       } 
      } 
      obj.date = obj.date; 
      return obj; 
     } 
    } 
} 
0

Cela devrait fonctionner:

var data = [{ date: "2010/01", San_Francisco201001: 1, San_Francisco201002: 2, San_Francisco201003: 3, }, { date: "2010/02", San_Francisco201001: 0, San_Francisco201002: 1, San_Francisco201003: 2, }]; 

var result = []; 

for(var i = 0; i < data.length; i++) { 
    var dateData = data[i]; 
    var sum = 0; 

    for(var element in dateData) if(dateData.hasOwnProperty(element)) { 
     var elementData = dateData[element]; 

     if(element != "date") { 
     sum += elementData; 
     } 
    } 

    result.push({date: dateData["date"], sum: sum}); 
} 
0
var data = [{ date: "2010/01", San_Francisco201001: 1, San_Francisco201002: 2, San_Francisco201003: 3 }, { date: "2010/02", San_Francisco201001: 0, San_Francisco201002: 1, San_Francisco201003: 2 }]; 

var out = {}; 
for(var row in data){ 

    var stats = data[row]; 
    var cnt = 0; 
    for(var itm in stats){ 
     if(itm==="date")continue; 
     cnt += stats[itm]; 
    } 
    out[stats["date"]] = cnt; 
} 

alert(out["2010/01"]);