интересный вопрос для вас. Я пытаюсь найти лучший способ проанализировать информацию из моего файла .csv
, чтобы у меня были необработанные данные и можно проводить сравнения.JavaScript Разбор данных в объект
То, что я пытаюсь сделать прямо сейчас сделать объект для каждого человека из данных, которые получают разобранные в Так что мой файл CSV состоит из:.
Position,Name,Salary,Gender,Category
Chef,John Doe,40000,M,0
Clerk,Jane Doe,20000,F,1
Server,Joe Doe,30000,M,2
Это очень незначительная части, у меня есть к 1000 различным людям, где явно позиции и такие повторяются. В моем коде, я в настоящее время имею JavaScript:
<script type="text/javascript"charset="utf-8">
var lines;
var person;
$(document).ready(function() {
//fetch text file
$.get('data.csv', function(data) {
//split on new lines
lines = data.split('\n');
//This line didn't work and gave me an error?
//person = lines.split(',');
person = data.split(',');
//window.alert(lines[1]);
//window.alert(person[5]);
});
});
</script>
В любом случае, я в основном попробовал несколько вещей, не работал и удалил. Поэтому позвольте мне пересмотреть то, что я пробовал.
- Каждая строка работает правильно, поэтому линия в настоящее время выдает всю строку за строкой. Поэтому я попытался разделить каждую из этих строк на игрока, основанный на
,
. Это, однако, дало мне ошибку, говоря, что.split
не определено. - Итак, следующее, что я пробовал, - это просто расщепление данных, и это работает в некоторой степени. Он идеально подходит для первой линии, а затем становится неуклюжим, когда дело доходит до новой строки. Он пропускает позицию
chef
и принимаетJohn Doe
. Затем, когда он попадает вCategory
он правильно принимает0
, но и печатаетChef
с 2 поступает ниже в том же окне при использованииwindow.alert(var[number])
Тогда я понимаю, ну это на самом деле не будет работать в любом случае, я хотите, чтобы каждый человек был собственным объектом. Поэтому я хочу, чтобы каждый person
имел свои собственные переменные: position, name, salary, gender, category
Я посмотрел на него, и я получаю довольно много способов его создания, но никто не принимает информацию через файл, но вручную определяет его прямо там и там , Так может ли кто-то помочь мне с этим? Должен ли я сделать какой-то цикл, а потом что-то интересное, как:
var people = {
position:"",
name:"",
salary:0,
gender:"",
category:,
};
for(i = 5; i != eof; i+5){
people.position() = person[i];
people.name() = person[i+1];
people.salary() = person[i+2];
people.gender() = person[i+3];
people.category() = person[i+4];
}
Честно говоря, не слишком уверен, так что любая помощь с этим было бы здорово. Благодаря!
Edit: С помощью Лукас, где я в настоящее время:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript"charset="utf-8">
var people = [];
$(document).ready(function() {
$.get('data.csv', function(data){
var lines = data.split('\n');
var properties = ["position", "name", "salary", "points", "team"]
for (var i = 0; i < lines.length; i++){
var person = lines[i].split(',');
var tmpPlayer = {}
for (var n = 0; n < person.length; n++){
tmpPlayer[properties[n]] = person[n]
}
people.push(tmpPlayer);
}
});
//correctly displays the array of every person
console.log(people);
//gives the result undefined
console.log(people[1]);
//error Uncaught TypeError: Cannot read property 'name' of undefined
console.log(people[1]["name"]);
});
</script>
</body>
</html>
data.csv
Файл:
Position,Name,Salary,Gender,Category
Chef,John Doe,40000,M,0
Clerk,Jane Doe,20000,F,1
Server,Joe Doe,30000,M,2
линии массив не является строкой, так что вы не можете разделить его. Вы должны перебирать * каждый * элемент в строках и разделить это вместо этого. –