2011-12-04 58 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