Как получить доступ к структуре, подобной словарю, в Protovis (Javascript)

#javascript #protovis

#javascript #protovis

Вопрос:

Я пытаюсь визуализировать набор данных flickr с помощью protovis. Я понимаю часть визуализации, но, тем не менее, у меня есть вопрос о доступе к данным. Мне был предоставлен пример визуализации, и он обращается к данным следующим образом:

 var data = pv.range(250).map(function(row) {
    return {
        views: parseInt(Data.data(row, 2)), //refers to the 4 row and 2nd collumn in CSV
        users: Data.data(row, 6),
        date:  Data.data(row, 8))), //more collumns excist but for now we only use these
     };
  });
  

Насколько я понимаю, часть набора данных теперь хранится в переменных data, а именно views, users и date. Можно ли использовать эту переменную как словарь?

Что я пытаюсь сделать, так это проверить, есть ли даты, в которые один пользователь встречается более 2 раз. Я думал о циклическом просмотре данных var следующим образом:

 dateUserDict {};

for (d=0; d < data.date.length; d   ){
    for (i=0; i < data.users.length; i   ){
        for (j=0; j < data.users.length; j  ){
            if (data.users[i] == data.users[j]){
                userCounter   //this should count the number of occurences of a specific user on a specific date
                dateUserDict[data.date] = [data.user][userCounter]}
        }
    }
}
  

Похоже, это не работает. Я пытаюсь сохранить события (количество раз, когда пользователь встречается с определенной датой) в словаре. Если я получу словарь, как описано, я смогу легко визуализировать все это. Но именно это преобразование из первого dict (data) во второй (dateUserDict) меня беспокоит!

Любая помощь или толчок высоко ценятся!

Спасибо

джоррит

Ответ №1:

Предоставленная вами функция создаст массив объектов Javascript.

 var data = pv.range(250).map(function(row) {
  return {
    views: parseInt(Data.data(row, 2)), //refers to the 4 row and 2nd collumn in CSV
    users: Data.data(row, 6),
    date:  Data.data(row, 8))), //more collumns excist but for now we only use these
  };
});
  

Результат будет выглядеть примерно так:

 var data = [ {views:10, users: 9, date: '09/13/1975'}, ... ]
  

Итак, вместо использования data.users.length используйте data.length , а вместо data.users[i] вы должны использовать data[i].users и т.д.

Комментарии:

1. извините за запоздалую реакцию, но вы правы. 2d-объекты всегда меня смущают 😉