По-перше, перший рядок вашого csv повинен бути розділеним комами списком імен стовпців, щоб використовувати цей метод. Якщо це не можливо, додати коментар про це , і я буду бачити , якщо я можу працювати, як використовувати d3.csv.parseRows
замість d3.csv.parse
. d3.csv.parse
викликається функцією оцінювача на .defer(function, url, assessor)
.
Я припускаю, що ваш файл зараз виглядає так:
danger.csv
iso,level
AFG,100
ALB,0
DZA,12
...
Використовуючи це, ви можете створити хеш-код пошуку від ISO3 до рівня небезпеки.
var dangerByISO3 = d3.map();
queue()
.defer(d3.json, "url to topo.json")
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
.await(ready);
function ready(error, world) {
//You now have world as your available topojson
//And you have dangerByISO3 as your danger level hash
//You can lookup a danger level by dangerByISO3.get(ISO3 code)
}
Посібник із кодом
var dangerByISO3 = d3.map();
Спочатку ви створюєте об'єкт d3.map (), який буде функціонувати як ваш хеш-ключ, і зберігаєте це у змінній небезпеціByISO3.
queue()
Використовуйте чергу для паралельного завантаження.
.defer(d3.json, "url to topo.json")
Завантажте свій topojson як перший аргумент, який буде передано функції очікування (після помилки). Зверніть увагу на стиль, у якому ця функція пов'язана ланцюжком queue()
, але вказана в окремому рядку (на кінці немає крапки з комою queue()
).
.defer(d3.csv, "url to danger.csv", function(d) {dangerByISO3.set(d.iso, +d.level);})
Тут відбуваються дві речі. По-перше, ви завантажуєте nevar.csv як ваш другий аргумент, який потрібно передати функції очікування. Як ви побачите нижче, цей аргумент насправді не використовується. Натомість аргумент оцінювача надається функції завантаження, d3.csv. Цей оцінювач буде обробляти кожен рядок csv. У цьому випадку ми називаємо функцію встановлення на nevarByISO3, так що для кожної комбінації iso
ключа ми встановлюємо значення level
як значення, що йде з цим ключем. +d.level
Позначення використовують унарні +
примушувати значення d.level до ряду.
.await(ready);
Після завантаження обох джерел даних вони передаються функції як два окремі аргументи ready()
. Перший аргумент зворотного виклику - це завжди перша помилка, яка виникла. Якщо помилки не сталося, нуль буде передано як перший аргумент. Другий аргумент - це перше джерело даних (результат першого завдання), а третій аргумент - друге джерело даних (результат другого завдання).
function ready(error, world) {...}
Це функція зворотного дзвінка ready()
. Спочатку ми беремо error
аргумент, який повинен бути недійсним, якщо два завдання з завантаження успішно виконані (ви насправді повинні додати мову для лову та обробки помилок). Далі ми беремо дані топойсона як об’єкт countries
. Ці дані повинні бути оброблені в тілі функції з чимось подібним .data(topojson.feature(world,world.objects.countries).features)
. Оскільки ready()
третій аргумент не бере, результат другого завдання, наш csv, просто відкидається. Ми використовували його лише для створення ключового хешу і не знадобився йому після цього.