Читать содержимое ячеек объекта data
Я прочитал CSV-файл, используя код JavaScript, и я хочу вставить его в 2D-массив, чтобы сделать некоторую обработку
var dataArray = new Array;
function parseCSV(dataArray) {
//replace UNIX new lines
data = data.replace(/\r\n/g, "\n");
//replace MAC new lines
data = data.replace(/\r/g, "\n");
//split into rows
var rows = data.split("\n");
// loop through all rows
for (var i = 0; i < rows.length; i++) {
// this line helps to skip empty rows
if (rows[i]) {
// our columns are separated by comma
var column = rows[i].split(",");
var date=column[0];
var value = column[4];
// create object which contains all these items:
var dataObject = {
date: date,
T4: value
};
dataArray.push(dataObject);
}
}
}
}
В качестве теста я пытаюсь прочитать содержимое ячейки и отобразить на веб-странице, чтобы убедиться, что я прочитал файл.
<script type="text/javascript">
var x= dataArray[1][4];
document.write(x);
</script>
но это ничего не показывает. Может кто-нибудь помочь??
2 ответа
var dataArray = new Array;
var data = "Date,Description,Created By,Modified By,T4 Tag\n";
data += "20170424,This is record 1,user1,none,Just work please.\n";
data += "20170424,This is record 2,user2,none,I'm trying too.\n";
function parseCSV(dataArray) {
//replace UNIX new lines
data = data.replace(/\r\n/g, "\n");
//replace MAC new lines
data = data.replace(/\r/g, "\n");
//split into rows
var rows = data.split("\n");
// loop through all rows
for (var i = 0; i < rows.length; i++) {
// this line helps to skip empty rows
if (rows[i]) {
// our columns are separated by comma
var column = rows[i].split(",");
var date=column[0];
var value = column[4];
// create object which contains all these items:
var dataObject = {
date: date,
T4: value
};
dataArray.push(dataObject);
}
}
}
parseCSV(dataArray);
Не имея файла, я вынудил некоторые данные CSV в строку для обработки. Ваш вопрос не показывает эти два пункта:
- как вы устанавливаете переменные данные
- как вы вызываете parseCSV(dataArray)
Если эти две вещи присутствуют, все должно работать - вот доказательство
Что касается части HTML-скрипта:
адресация вашего массива выглядит неправильно - похоже, она должна выглядеть так:
<script>
var x = dataArray[1].T4;
document.write(x);
</script>
Вот мои рассуждения:
Я понимаю, что вы передаете данные CSV в эту функцию для анализа в вашей переменной dataArray - правильно?
Если все правильно, эти данные будут выглядеть примерно так, как я добавил вручную (я добавил это напрямую, только для работы с чем-то).
Чем больше элемент, тем не менее, откуда поступают данные, но в конечном итоге он анализируется этой функцией parseCSV.
Когда это происходит, вы создаете добавление к пустой переменной dataArray следующим образом:
Для первого прохода это будет выглядеть следующим образом:
[{"date": "Date", "T4": "Tag T4"}]
Для второго прохода:
[{"date": "Date", "T4": "Tag T4"}, {"date": "20170424", "T4": "Просто работайте, пожалуйста."}]
Для третьего прохода:
[{"date": "Date", "T4": "Tag T4"}, {"date": "20170424", "T4": "Просто работай, пожалуйста."}, {"date": "20170424", "T4": "Я тоже пытаюсь."}]
Так что теперь, когда вы в своем HTML раздел кода, у вас нет ключа адреса [4].
Ваш код говорит:
var x = dataArray[1][4];
Рассмотрим следующее, чтобы понять, что я имею в виду:
var record = dataArray[1];
//{"date" : "20170424", "T4" : "Just work please."}
//There is no key 4 here only date & T4.
var date = record.date;//returns: "20170424"
var t4 = record.T4;//returns: "Just work please."
В отличие от этого, если бы у вас было следующее - ваш метод работал бы
myObj = {"date" : "20170424", "4" : "This is a value for field 4", "T4" : "Just work please."}
myObj[4];//returns "This is a value for field 4";
надеюсь, это объясняет это достаточно ясно.
Здесь функция загрузки файла CSV
function loadCSV(file) {
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari
var request = new XMLHttpRequest();
} else {
// code for IE6, IE5
var request = new ActiveXObject('Microsoft.XMLHTTP');
}
// load
request.open('GET', file, false);
request.send();
parseCSV(dataArray);
}