2015-05-28 5 views
0

Из файла .csv Мне нужно построить древовидную структуру, используя три столбца ниже. Колонок состояния должен быть родительским узлом, идентификатора является дочерним узлом состояния и NDI является дочерним ID узла. В настоящее время моя программа может читать файл .csv и хранить его в двухмерном массиве.рекурсивно построить дерево из массива javascript

Вот мой код: Link to .csv file

<body> 
<input type="file" id="files" name="files[]" multiple /> 
<output id="list"></output> 

<script> 
    function handleFileSelect(evt) { 
    var files = evt.target.files; 


    for (var i = 0, f; f = files[i]; i++) { 

     var reader = new FileReader(); 

     reader.onload = (function(theFile) { 
     return function(e) { 

      var string = e.target.result; 
      console.log(string); 

      var array1=string.split("\n"); 
      alert(array1.length) 
      var array2 = new Array(); 


      for(var i=0; i< array1.length; i++){ 
      array2[i] = array1[i].split(","); 
      } 
      //completed upto saving as 2D array 

     }; 
     })(f); 

     reader.readAsText(f); 

     } 
    } 
    document.getElementById('files').addEventListener('change', handleFileSelect, false); 
</script> 

Я хочу построить древовидную структуру из него.

+0

является 'id' первый столбец csv-файла? Второй 'for' читает целую строку за цикл? –

+0

Вы уже делали код до сих пор, что на самом деле делает то, что вы просили? –

+0

'id' - первая колонка – nisa

ответ

0

Это должно сделать это, замените ваш второй for с кодом ниже:

// We cannot define our own keys for Javascript arrays, so we are using Object 
var result  = new Object(); 
var salesIndex = 8; 
var idIndex = 0; 
var ndiIndex = 7; 

for(var i=0; i< array1.length; i++){ 
    // array containing all line's columns 
    var columns = array1[i].split(","); 

    // especific columns that is of our interest 
    var rowSale = columns[salesIndex]; 
    var rowId = columns[idIndex]; 
    var rowNdi = columns[ndiIndex]; 

    // If sale key doesn't exists in the array, add it 
    if (!(rowSale in columns)) { 
     result.rowSale.rowId = new Array(); 
     result.rowSale.rowId.push(rowNdi); 

    } else if (!(rowId in columns.rowSale)) { 
     // If id key doesn't exists in the array, add it 
     result.rowSale.rowId = new Array(); 
     result.rowSale.rowId.push(rowNdi); 

    } else if (!columns.rowSale.rowId.indexOf(rowNdi)) { 
     // If ndi isn't in the array, add it 
     result.rowSale.rowId.push(rowNdi); 
    } 
} 
0

Если я did'nt missunderstand вас, это должно сделать трюк:

function buildTree(input) { 
    var output = {}; 
    for (var i in input) { 
     var state = input[0]; 
     var id = input[1]; 
     var ndi = input[2]; 
     if (output[state] === undefined) output[state] = {}; 
     if (output[state][id] === undefined) output[state][id] = []; 
     output[state][id].push(ndi); 
    }; 
    return output; 
}; 
Смежные вопросы