2015-04-02 1 views
0

У меня есть файл JSON, который я использую для визуализации с помощью d3.js. Я хочу получить количество полных строк для определенного кода. Для этого я использую следующее:Как получить общее количество строк с определенным значением в json-файле в d3.js

data.keys(d.code).length 

Но его не работает. Как я могу это решить? Я нашел одну идею, но она не показывает правильные значения. Что с этим не так?

Object.keys(d.code).length 

У меня есть JSON-файл со следующими образцами данных

[ 
{"name":"a","code":20}, 
{"name":"b","code":20}, 
{"name":"c","code":20}, 
{"name":"d","code":21} 

] 

Моя цель, чтобы получить количество данных с одинаковым кодом. Например, для кода 20 я должен получить 3 в качестве вывода.

+0

Можете ли вы уточнить, например включив пример? –

+0

Хорошо, дайте мне больше объяснений –

ответ

0

Вам не нужно D3.js для этого. Простой JavaScript должен это сделать. Что-то вроде:

total = data.reduce(function(count, entry) { 
    return count + (entry.code === 20 ? 1 : 0); 
}, 0); 

Очевидно, вы можете преобразовать его в функцию для обработки других произвольных значений, чем 20

+0

На самом деле я не знаю, какая будет ценность кода. Это не должно быть 20. Это может быть любая ценность. Его фактически непрерывно исходит от хаупа. –

+0

Итак, как я уже сказал, преобразуйте приведенный выше фрагмент в функцию. –

+0

Yap У меня появилась идея. благодаря –

0
var count = 0; 
var length = data.length; 

for (var x = 0; x < length; x++) 
{ 
    if (data[x].code == 20) 
     count++; 
} 

console.log('Final count: ' + count); 

Возможно, что-то в этом роде.

Если вы хотите функцию, которую вы могли бы использовать это:

var getCount = function(data, val) 
{ 
    var count = 0; 
    var length = data.length; 

    for (var x = 0; x < length; x++) 
    { 
     if (data[x].code == val) 
      count++; 
    } 

    return count; 
} 

Тогда называют это так:

var count = getCount(data, 20); // should return 3 
+0

Не работает. Я ищу умное решение, которое сделает код эффективным » –

+0

Хорошо, что вы получаете с' console.log (data); '? Другими словами, что такое данные? Это массив? –

+0

Кроме того, имейте в виду, что большее количество строк кода не обязательно приравнивается к менее эффективному коду. Совсем наоборот. –

1

Вы могли бы также использовать d3.nest() группировать данные, основанные на code и он возвращает номер по каждой группе:

var json = [ 
    {"name":"a","code":20}, 
    {"name":"b","code":20}, 
    {"name":"c","code":20}, 
    {"name":"d","code":21} 
]; 

var nest = d3.nest() 
    .key(function(d) { return d.code; }) 
    .rollup(function(values) { return values.length; }) 
    .entries(json); 
Смежные вопросы