2016-04-16 1 views
2

Я изучаю замечательные библиотеки, dc.js и crossfilter.js, и я делаю пример с использованием карты геохрополе.dc.js reductio helper function, как получить результат в объектном формате

Я хочу прокормить некоторые данные и получить карту, нарисовать конкретные страны, но страны не появляются. Это часть гораздо большего примера, и я пытаюсь представить только ту часть, с которой я столкнулся. Я отправил jfiddle в https://jsfiddle.net/wheatgrass/93w6p6dc/6/

(но у него была проблема с получением cdns для работы), где вы (надеюсь) можете видеть данные и мои выходы перекрестного фильтра. Все идет на вывод console.log.

Первоначально у меня были данные во вложенном массиве, но читал о том, что cf нуждаются в «сплющенных» данных, поэтому я добавляю два примера подмножества сплющенных данных, стран1 и стран2. Я хочу использовать страны2.

Я попытался использовать вспомогательные библиотеки reductio и (yay!) Получил вывод n1dimgroup с помощью ключа «nid» и массива стран со значениями. Я сделал это, используя пример в Readme.md на странице reductio github. Я не мог найти каких-либо примеров в SO или в других местах для того, что я пытаюсь.

Мне нужна помощь с этой частью. Как переписать редуктор так, что вывод n1dimgroup - это объект с ключом, значения, как это?

{ key: Benin, value: 1} 
{ key: Nepal, value: 2} 
... 

etc?

Ваша помощь и помощь будут очень признательны. Спасибо. Я сократил код ниже, но данные находятся на jfiddle.

код ниже

<script> 
//please see var countries2 on the jfiddle 

var countries = [ 
    "key":"Albania", 
    "value":2, 
    "key":"Jamaica", 
    "value":1, 
    "key":"Senegal", 
    "value":3, 
    "key":"Morocco", 
    "value":2, 
    "nid":"0", 
    }, 
    { 
     "key":"Fiji", 
     "value":1, 
     "key":"Mongolia", 
     "value":1, 
     "key":"Uganda", 
     "value":1, 
     "nid":"36", 
     } 
    var n1 = crossfilter(countries2); 
    var n1dim = n1.dimension(function(d) { return d.nid}); 
    var n1dimgroup = n1dim.group(); 
     console.log("n1dim",n1dim.top(Infinity)); 
     console.log("n1dimgroup",n1dimgroup.top(Infinity)); 

var reducer = reductio() 
    .exception(function(d) { return d.key; }) 
    .exceptionCount(true) 
    .exceptionSum(function(d) { return d.value; }); 
reducer(n1dimgroup); 

console.log('reducer', reducer); 
console.log('n1dimgrouptop after reductio', n1dimgroup.top(Infinity)); 
console.log('n1dimgrouptop.key', n1dimgroup.top(Infinity).key); 
console.log('n1dimgrouptop.value', n1dimgroup.top(Infinity).value); 
</script> 

Как получить редуктор, чтобы обеспечить выход в ключе, формы значения в объекте?

+0

Мне любопытно, зачем вам это нужно? Я подозреваю его, что группа работает с dc.js по умолчанию, но в этом случае я просто предлагаю посмотреть опции keyAccessor и valueAccessor на группах dc.js, которые позволяют использовать объекты в форматах, отличных от ключа/значения формат. –

+0

BTW, JSFiddle выше сломан для меня, потому что зависимости не загружаются, и есть несколько опечаток. Вот рабочая версия: https://jsfiddle.net/mh0n7tx0/4/ –

+0

Спасибо за ваш ответ, Этан. Я спрашиваю, потому что в geochoropleth json загружается в d.properties.name, которое выходит в формате объекта в консоли. Я могу с успехом дать ему данные для рисования, в которых есть одна страна, с одним ключом и значением, но когда я отправляю данные из группы с несколькими ключами и значениями, она не рисует ни одного из них. Я попытаюсь привести лучший пример на jsfiddle. Я также пробовал много комбинаций с ключевыми и аксессуарными значениями, но еще не был успешным. – user2517542

ответ

1

Эта примерная скрипка Этана показала мне, как использовать функции доступа после , используя reductio lib в группе. Это ответило на мои вопросы. Благодаря!