#javascript #csv #d3.js
#javascript #csv #d3.js
Вопрос:
В качестве набора данных у меня есть CSV-файл. Я использую приведенный ниже код для его загрузки :
var dataset = d3.csv("mydata.csv");
Мой вопрос в том, как я могу получить доступ к элементам внутри dataset var. Как я проверил, переменная dataset является объектом. Представьте, что мне нужен элемент данных в строке 4 и столбце 7, как я могу получить этот фрагмент данных?
Комментарии:
1. это должен быть объект array, как
[ {"Year": "1997", "Make": "Ford", "Model": "E350", "Length": "2.34"}, {"Year": "2000", "Make": "Mercury", "Model": "Cougar", "Length": "2.38"} ]
указано в документации
Ответ №1:
набор данных будет доступен только в функции обратного вызова
d3.csv("mydata.csv", function(dataset) {
dataset = data;
console.log(dataset)
});
Попробуйте что-то вроде этого.
Ответ №2:
Эта часть d3 является асинхронной, что означает, что ваш код javascript не сидит и не ждет выполнения этой инструкции, пока не будут загружены CSV-данные, к чему вы могли бы привыкнуть из других языков. Вместо этого вы указываете d3, какую функцию следует вызвать, как только данные станут доступны, и оттуда работаете с ней. Функция может быть либо определена в другом месте вашего кода, либо (что более типично) определена в вызове функции d3. Несколько примеров:
/* Do something with every row */
d3.csv("mydata.csv", function(data) {
/* Data has been read and is available as an array of 'row' objects */
data.forEach(function(d) {
/* Each row has the variable name 'd': 'columns' can be accessed as object properties */
console.log( d['Column name']}); // d ensures conversion to numbers if that is what you need, at first everything is text
}); //Close the function and .forEach(...) call
}); //Close the function AND the .csv(...) call
/* Just get one value */
d3.csv(csvfile, function(data) {
/* Read data from row 4 and some column */
console.log( data[3]['Column name']}); //As before, but I'm assuming you know the name of column '7'
}); //Close the function AND the .csv(...) call