user3007270
user3007270

Reputation: 406

How to add all but a few columns using javascript and d3

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

Answers (1)

Gerardo Furtado
Gerardo Furtado

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

Related Questions