Я изучаю замечательные библиотеки, 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>
Как получить редуктор, чтобы обеспечить выход в ключе, формы значения в объекте?
Мне любопытно, зачем вам это нужно? Я подозреваю его, что группа работает с dc.js по умолчанию, но в этом случае я просто предлагаю посмотреть опции keyAccessor и valueAccessor на группах dc.js, которые позволяют использовать объекты в форматах, отличных от ключа/значения формат. –
BTW, JSFiddle выше сломан для меня, потому что зависимости не загружаются, и есть несколько опечаток. Вот рабочая версия: https://jsfiddle.net/mh0n7tx0/4/ –
Спасибо за ваш ответ, Этан. Я спрашиваю, потому что в geochoropleth json загружается в d.properties.name, которое выходит в формате объекта в консоли. Я могу с успехом дать ему данные для рисования, в которых есть одна страна, с одним ключом и значением, но когда я отправляю данные из группы с несколькими ключами и значениями, она не рисует ни одного из них. Я попытаюсь привести лучший пример на jsfiddle. Я также пробовал много комбинаций с ключевыми и аксессуарными значениями, но еще не был успешным. – user2517542