1

20 個のキーと 3000 個を超えるエントリを含むオブジェクトがある場合、d3 を使用してオブジェクト全体を合計する方法はありますか?

たとえば、私が持っている場合:

Country: Germany, val2007:9.3, val2008:8.6
Country: Germany,val2007:3.4, val2008:1.0
Country: Austria, val2007:23.0, val2008:9.2
Country: Austria, val2007:1.2, val2007:3.2

次のような配列を作成できますか?

Country: Germany,val2007:12.7, val2008:9.6
Country: Austria, val2007:24.2, val2008:12.4

キー名を常に知っているわけではなく、「val」フィールドは val2007 と val2008 から val1997 -> val2017 までのいずれかになる可能性があることに注意してください

4

1 に答える 1

3

D3 はこれを行う簡単な方法を提供していませんが、便利なツールをいくつか提供しています。1 つ目はd3.nest( docs ) で、特定のキーで行をグループ化できます。その後、たとえばドイツの行を自分で合計する方法を理解する必要があります。ここでは を使用しますArray#reduce

function rollup(rows) {
    return rows.reduce(function(agg, row) {
        // you could pre-calculate this if all rows had the same keys
        d3.keys(row)
            .filter(function(k) { return k !== 'Country' })
            .forEach(function(k) {
                if (!(k in agg)) agg[k] = 0;
                agg[k] += row[k];
            });
        return agg
    }, {});
}

data = d3.nest()
    .key(function(d) { return d.Country; })
    .rollup(rollup)
    .entries(data)
    .map(function(entry) {
        entry.values.Country = entry.key;
        return entry.values;
    });

ここで動作するフィドルを見ることができます: http://jsfiddle.net/nrabinowitz/MB3yz/

于 2012-11-10T17:13:15.290 に答える