У меня есть размер Crossfilterjs на ключе, соответствующем объекту.Неожиданное поведение с использованием группы в Crossfilterjs
Я группирую один из атрибутов объекта и использую reduceCount(), чтобы найти количество значений для этого атрибута, но результаты не то, что я ожидал.
Мой код:
<!DOCTYPE html>
<meta charset="utf-8">
<script src="//cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.9/crossfilter.min.js"></script>
<script>
var arr = [];
for (var i = 0; i < 100; i++) {
for (var j = 0; j < 100; j++) {
for (var k = 0; k < 100; k++) arr.push({a: i, e: { b: j, c: k}});
}
}
var cf = crossfilter(arr),
a = cf.dimension(function(d) { return d.a; }),
e = cf.dimension(function(d) { return d.e; });
var counts = e.group(function(d) { return d.b; })
.reduceCount()
.orderNatural()
.top(Infinity);
console.log(counts);
</script>
Когда я проверяю консоль я получаю массив с объектами 67 ключ/значение.
Я ожидал получить массив с 100 объектами ключ/значение, по одному для каждого значения b.
Также некоторые из них не то, что я ожидал. Я ожидал, что все значения будут одинаковыми. Однако для большинства ключей я получаю значение 100, а для некоторых я получаю очень разные значения. Ключ 99 имеет значение 990100.
Я получил эти результаты в Google Chrome 36.0.1985.143 м.
Я раньше не использовал пользовательские функции группировки в Crossfilterjs, и кажется, что я не понимаю функциональность должным образом.
Я искал группировку по API Crossfilterjs, но это не помогло мне разобраться.
Заранее спасибо
Да, я уверен, что это проблема. Создание измерения на объекте, вероятно, не закончится хорошо. –
В этом проблема. Я выполнил рекомендацию docs о переопределении метода valueOf для моего объекта, и теперь все работает нормально. Слишком рано принимать мой собственный ответ. Спасибо за комментарий, тем не менее. –