Reputation: 595
I have a javascript object in a dictionary that looks like this:
{ date: "2010/01",
San_Francisco201001: 1,
San_Francisco201002: 2,
San_Francisco201003: 3,
},
{ date: "2010/02",
San_Francisco201001: 0,
San_Francisco201002: 1,
San_Francisco201003: 2,
}
And would like to find
{ date: "2010/01", sum: 6, ), { date: "2010/02", sum: 3, )
It gets a bit tricky, because the property names are arbitrary. Any clue how to go about doing this?
Thanks.
Upvotes: 2
Views: 3058
Reputation: 207511
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"] );
Upvotes: 0
Reputation: 95518
This should work:
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});
}
Upvotes: 0
Reputation: 12140
To find the sum of a particular date
value, create a function with a body like this:
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;
}
}
}
Upvotes: 0
Reputation: 700342
That is not one object, that is two objects. I assume that you have them in an array. Then you can loop through the array, and loop through the properties in each object:
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 });
}
Upvotes: 3