2016-06-10 7 views
0

Ich habe eine CSV-Datei:erstellen Objekt mit dem richtigen Format von csv

name,number,level 
Mike,b1,0 
Tom,b2,0 
..... 

ich wie etwas bauen will:

matrix: { 

    { name: 'Mike', number: 'b1', level: 0 }, 
    { name: 'Tom', number: 'b2', level: 0 }, 
     .... 
    } 

und ich möchte in der Lage sein, die Eigenschaften zu extrahieren, zum Beispiel matrix.name.

Mein Problem ist, dass ich später mit EJS-Datei nach Namen suchen zum Beispiel suchen.

+2

diese Frage finden: http://stackoverflow.com/questions/7431268/how-to-read-data-from-csv-file-using-javascript – Oshadha

+1

Genau wie jeder sagte, [in Ihrer vorherigen Frage] (http://stackoverflow.com/questions/37752811/extract-fields-from-object), sollten Objekte keine doppelten Schlüssel haben. Vielleicht möchten Sie eine Reihe von Objekten. 'matrix = [{name: 'Mike', Nummer: 'b1', level: 0}, {Name: 'Tom', Nummer: 'b2', level: 0}, ...]'. Sie können auch in Erwägung ziehen, die Namen als Schlüssel für die restlichen Eigenschaften zu verwenden (zum Beispiel "matrix.Mike = {number: 'b1', level: 0}'). –

+0

@MikeC: Ja, du hast recht..Ok, ich mochte auch deine Idee.Kannst du mich wissen wie es geht? Danke! – George

Antwort

1

Ich gehe davon aus, dass Sie bereits die CSV-Daten geladen haben. Wenn nicht, you can refer to this question zum Laden dieser Daten in Ihre Anwendung.

Von dort gehe ich davon aus, dass Ihre Daten in einer Variablen namens csv gespeichert sind. Was Sie tun müssen, ist zuerst jede Zeile dieser Daten zu verarbeiten und die Werte in Kommas zu teilen. Danach ist es so einfach wie das Erstellen eines neuen Objekts, das jedes Objekt bewertet und zu einem Array hinzufügt.

var csv = 'name,number,level\n' + 
 
      'Mike,b1,0\n' + 
 
      'Tom,b2,0'; 
 

 
// Split the data into individual lines by splitting on the line break 
 
var lines = csv.split('\n'); 
 

 
// I'm going to store the column names so I can use them to automatically get each value 
 
// Note that I also removed the columns from the `lines` array so it won't be there when we go through it 
 
var columns = lines.shift(); 
 

 
// Make sure we split on the commas 
 
columns = columns.split(','); 
 

 
// Create an array for us to store the objects in 
 
var matrix = []; 
 

 
// Next, we begin processing each line 
 
for (var i = 0, len = lines.length; i < len; i++) { 
 
    var line = lines[i]; 
 
    
 
    // Each value is separated by a comma. Split the line on those commas 
 
    var values = line.split(','); 
 
    
 
    // Now we create a new object that we'll store each value in 
 
    var obj = {}; 
 
    
 
    // Remember that `columns` array? We're going to use that to generate our keys 
 
    for (var j = 0, numOfColumns = columns.length; j < numOfColumns; j++) { 
 
    // This is going to be 'name', 'number', and 'level' 
 
    var column = columns[j]; 
 
    
 
    // Here is where we extract the matching value 
 
    var value = values[j]; 
 
    
 
    // Now we add a new property to that new object using the `column` as the key 
 
    // and the `value` as, well, the value 
 
    obj[column] = value; 
 
    } 
 
    
 
    // The object has been generated, add it to the array 
 
    matrix.push(obj); 
 
} 
 

 
// Display the complete array 
 
document.querySelector('pre').innerText = JSON.stringify(matrix, null, 2);
<pre></pre>

+0

: Ok, schön! In Bezug auf die' Verwendung der Namen als Schlüssel für die restlichen Eigenschaften (zum Beispiel matrix.Mike = {Zahl: 'b1', level: 0}) '? (upvoted) – George

+0

@George Es ist nicht schwer zu folgern. Sie machen "Matrix" zu einem Objekt ('var matrix = {}') und Sie tun 'Matrix [Werte [0]] = obj'. 'values ​​[0]' ist der Name, also fügen Sie einfach eine neue Eigenschaft zu 'matrix' hinzu, die mit diesem Namen übereinstimmt. –

+0

: Ok, richtig. Und wie kann ich etwas wie "Matrix.Name" oder "Matrix.Nummer" verwenden und mir die Ergebnisse geben? – George