获取nodejs中的对象数组indexOf duplicate元素

时间:2017-01-16 10:30:08

标签: arrays node.js excel duplicates

我有一个很大的问题。我想stackoverflow成员可以帮助我..我在我的本地有一个Excel文件。而且我想阅读这个Excel,如果Excel行的数据比我写入控制台的数据重复。

例如清楚;

这是我的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第一个元素,第二行是rowValues第二个元素vs ...

所以在Excel文件中第5行和第11行重复,我想为消息编写控制台&#34; 5和11行是重复的&#34;我想要的是。我该怎么做?谢谢你的帮助..

1 个答案:

答案 0 :(得分: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/