2011-12-04 79 views
0

我的目标是参加其中包含约400万记录的CSV文件,并处理每一条记录,同时擦洗特定字段的数据。我们实际上创建了一个可逆的哈希过程,但这是一个耗时的过程(接近1秒)。我想这样做,因为只有约50000该字段的唯一值是将它们设置为一个对象的属性。以下是如何构建对象的伪示例。你可以看到,对于重复我打算只是简单地覆盖现有值(这是为了避免通过一些如果基于搜索语句具有循环。使用重复数据删除的NodeJS

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?),但我仍然不完全知道如何acccomplish我在做什么,我怎么能那么相信我的对象,具有50K属性而且基本上转储值到一个数组,这样我可以有这样的事情结束了?

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

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

+0

需要注意的是对象的键的顺序是**是很重要的[不保证](https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in#Parameters)* *。你很可能落得'[“fieldValue3”,“fieldValue1”,“fieldValue2”]',所以你必须做一些额外的工作,如果顺序很重要。 – josh3736

回答

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.... 
    } 
}); 
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的回答相似。这只是你想要的数组的一步。

+0

感谢您的回复。我不知道.keys。我将来肯定会有一些用途:) – DvideBy0