2010-10-28 45 views
2

我在字典中的JavaScript對象,看起來像這樣:總和JavaScript對象的

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

,想找到

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

它變得有點棘手,因爲屬性名稱是任意的。任何線索如何去做這件事?

謝謝。

+4

尾隨逗號是一種沒有沒有。 – epascarello 2010-10-28 23:22:27

+0

因此,除了日期以外的所有內容都應該添加? – some 2010-10-28 23:26:06

+0

我刪除了json標籤,因爲這與JSON無關。 – Guffa 2010-10-28 23:34:03

回答

3

那不是一個對象,那是兩個對象。我假設你有一個數組。然後可以循環通過該陣列,並循環通過每個對象的屬性:

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

要查找特定date值的總和,創建一個函數具有這樣的機構:

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

這應該工作:

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"]);