Reputation: 406
I want my totals to be only the sum of vehichles excluding suvs
and bikes
. I need this to be dynamical so can't do
d.total=d.cars+d.trucks+d.skates
Blockquote
var data = [
{'date':'1/1/17', 'cars':2.0, 'trucks':3.0, 'suvs':4.0, 'bikes':0,'skates':0}
{'date':'2/1/17', 'cars':4.0, 'trucks':7.0, 'suvs':4.0, 'bikes':1.0,'skates':0.0}
{'date':'3/1/17', 'cars':0.0, 'trucks':3.0, 'suvs':5.0, 'bikes':0.0,'skates':4.0}
This is my code so far:
var ndx = crossfilter(data);
var parseDate = d3.time.format("%m/%d/%y").parse;
data.forEach(function(d) {
d.date = parseDate(d.eom);
d.total= ?;
});
Upvotes: 3
Views: 79
Reputation: 102174
A solution using for...in
:
data.forEach(function(d) {
d.date = parseDate(d.eom);
var sum = 0;
for(var key in d){
if(key != "suvs" && key != "bikes" && key != "date"){
sum += d[key]
}
}
d.total = sum;
});
Here is a demo:
var data = [{
'date': '1/1/17',
'cars': 2.0,
'trucks': 3.0,
'suvs': 4.0,
'bikes': 0,
'skates': 0
}, {
'date': '2/1/17',
'cars': 4.0,
'trucks': 7.0,
'suvs': 4.0,
'bikes': 1.0,
'skates': 0.0
}, {
'date': '3/1/17',
'cars': 0.0,
'trucks': 3.0,
'suvs': 5.0,
'bikes': 0.0,
'skates': 4.0
}];
var parseDate = d3.time.format("%m/%d/%y").parse;
data.forEach(function(d) {
d.date = parseDate(d.date);
var sum = 0;
for (var key in d) {
if (key != "suvs" && key != "bikes" && key != "date") {
sum += d[key]
}
}
d.total = sum;
});
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
Upvotes: 2