使用nodeJS进行重复数据删除

Deduplicating using nodeJS

本文关键字:数据 删除 nodeJS 使用      更新时间:2023-09-26

我的目标是接收一个包含大约400万条记录的CSV文件,并在清洗特定字段的数据时处理每条记录。我们的清理过程实际上创建了一个可逆哈希,但这是一个耗时的过程(大约1秒)。由于该字段只有大约50,000个唯一值,所以我想做的是将它们设置为对象的属性。下面是一个如何构建对象的伪示例。您可以看到,对于重复项,我计划只覆盖现有值(这是为了避免必须遍历一些基于if的搜索语句)。

    var csv = require('csv');
    var http = require('http');
    var CBNObj = new Object;
    csv()
    .fromPath(__dirname+'/report.csv',{
        columns: true
    })
    .transform(function(data){
        CBNObj[data['Field Value']] = data['Field Value'];
    });
    console.log(CBNObj);

创建的对象应该是这样的

myObj['fieldValue1'] = 'fieldValue1'
myObj['fieldValue2'] = 'fieldValue2'
myObj['fieldValue3'] = 'fieldValue3'
myObj['fieldValue1'] = 'fieldValue1'
myObj['fieldValue1'] = 'fieldValue1'

我在这里看过一些很好的帖子关于迭代在一个对象的每一个属性(像这个迭代在javascript中使用原型对象的每一个属性?),但我仍然不确定如何完成我正在做的事情。我怎么才能让我的对象有50k的属性并将值转储到数组中这样我就能得到这样的结果呢?

myArray = ['fieldVaue1','fieldVaue2','fieldVaue3']

编辑:我也可以在第一部分使用一些帮助,因为当我尝试设置对象属性时,我得到一个空值或未定义。我还需要帮助,然后遍历对象属性来构建我的数组。

您知道对象的键是您想要的惟一值。你只需要一个数组。在node.js中你可以使用Object.keys()。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys

这是一种标准的方法,将对象的所有键(原型链中没有提供的键)放入数组中。所以你的例子看起来像这样。

var csv = require('csv');
var AcctObj = new Object();
var uniqueArray;
csv()
.fromPath(__dirname+'/report.csv',{
    columns: true
})
.on('data',function(data){
    AcctObj[data['Some Field Value']] = data['Some Field Value'];
})
.on('end', function(){
    uniqueArray = Object.keys(AcctObj);
});

对象。keys也在内部做hasOwnProperty检查,所以它类似于@DvideBy0的答案。这只是你想要的数组的一步

var csv = require('csv');
var AcctObj = new Object();
csv()
.fromPath(__dirname+'/report.csv',{
    columns: true
})
.on('data',function(data){
    AcctObj[data['Some Field Value']] = data['Some Field Value'];
})
.on('end', function(){
    for(var prop in AcctObj) {
        if(AcctObj.hasOwnProperty(prop))
        //Do something here....
    }
});