2017-01-16 189 views
0

我對我有一個很大的問題。我猜stackoverflow成員可以幫助我..我有一個Excel文件在我的本地。而且我想閱讀這個Excel,並且如果Excel行有重複的數據比我寫入控制檯。獲取對象數組indexOf在nodejs中的重複元素

例如清楚;

這是我的Excel文件:

enter image description here

比我擅長閱讀代碼行:

workbook.xlsx.readFile('excelvalidation.xlsx').then(function() { 
    var rowValues = {}; 
    var worksheet = workbook.getWorksheet(1); 
    var columnCount = worksheet.columnCount; 

    worksheet.eachRow(function(row, rowNumber) { 
     if(rowNumber > 2) { 
      var dizi = []; 
      row.eachCell(function(cell, colNumber){ 
      dizi.push(cell.value); 
     }); 

     rowValues[rowNumber-3] = dizi; 
    } 
}); 

for(var i = 0 ; i < Object.keys(rowValues).length ; i++) { 
    console.log(" " + rowValues[i]); 
} 

rowValues是什麼對象有所有的行。它意味着1.行是rowValues第一個元素和2.行是rowValues第二個元素vs ...

所以在Excel文件中的第5行和第11行重複,我想寫控制檯的消息「5和11行是複製「我想要的。我該怎麼做?感謝您的幫助..

+0

所以,你想要的是比較單元的兩個或多個陣列? – MatthieuLemoine

回答

0

您可以通過將數組中的值連接成單個字符串,然後使用md5函數來計算rowValues中每個項目的md5散列值。 然後可以使用該散列作爲具有這些值的行的索引(導致該md5散列的值)。

下面是可以檢測多次出現(超過2個重複行)的實現:

var rowValues = [ 
    ['E', '10-15', 'ankara'], 
    ['E', '10-15', 'antalya'], 
    ['E', '20-25', 'ankara'], 
    ['E', '20-25', 'antalya'], 
    ['K', '10-15', 'ankara'], 
    ['K', '10-15', 'antalya'], 
    ['K', '20-25', 'ankara'], 
    ['K', '20-25', 'antalya'], 
    ['E', '20-25', 'ankara'], 
    ['K', '10-15', 'antalya'], 
    ['E', '20-25', 'ankara'], 
]; 

var hashes = {}; 

rowValues.forEach(function(row, idx){ 
    var hash = md5(row.join('~~~')); 
    if (hash in hashes) { 
    hashes[hash].push(idx); 
    } else { 
    hashes[hash] = [idx]; 
    } 
}) 

Object.keys(hashes).forEach(function(key, idx) { 
    var msg = ''; 
    if (hashes[key].length > 1) { 
    msg = 'Rows ' + hashes[key].join(' and ') + ' are duplicate\n'; 
    console.log(msg); 
    } 
}); 

演示在這裏:https://jsfiddle.net/b5nqbavq/2/

+0

非常感謝你.. –