使用nodeJS进行重复数据删除

时间:2011-12-04 17:01:32

标签: javascript arrays object node.js csv

我的目标是接收一个包含大约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'

我已经在这里查看了一些关于迭代对象中每个属性的好帖子(比如这个Iterating over every property of an object in javascript using Prototype?),但我仍然不确定如何完成我正在做的事情。然后,我怎么能用50k属性获取我的对象,并基本上将值转储到一个数组中,这样我最终会得到这样的东西?

myArray = ['fieldVaue1','fieldVaue2','fieldVaue3']
编辑:我也可以在第一部分使用一些帮助,因为我在尝试设置对象属性时得到一个空值或未定义。我还需要帮助,然后遍历对象属性来构建我的数组。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您知道对象的键是您想要的唯一值。你只需要一个数组。在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);
});

Object.keys也在内部执行hasOwnProperty检查,因此它类似于@ DvideBy0的答案。这只是你想要的阵列的一步。

答案 1 :(得分:0)

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....
    }
});
相关问题