Дедупликация с использованием nodeJS - PullRequest
0 голосов
/ 04 декабря 2011

Моя цель - взять файл CSV, который содержит приблизительно 4 миллиона записей, и обрабатывать каждую запись при очистке данных определенного поля. Процесс очистки, который у нас есть, на самом деле создает обратимый хэш, но это длительный процесс (почти 1 секунда). То, что я хотел бы сделать, так как для этого поля есть только около 50 000 уникальных значений, это установить их как свойства объекта. Вот псевдо-пример того, как будет построен объект. Вы можете видеть, что для дубликатов я планирую просто перезаписать существующее значение (это нужно для того, чтобы избежать циклического перебора некоторых операторов поиска на основе.

    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 с использованием Prototype? ), но я все еще не совсем уверен как выполнить то, что я делаю. Как тогда я могу взять свой объект со свойствами 50k и по существу вывести значения в массив, чтобы я мог получить что-то вроде этого?

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

РЕДАКТИРОВАТЬ: я мог бы также использовать некоторую помощь в первой части здесь, потому что я получаю нулевое значение или неопределенное, когда я пытаюсь установить свойства объекта. Мне также по-прежнему нужна помощь, чтобы пройти через свойства объекта, чтобы построить мой массив. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Вы знаете, что ключи вашего объекта - это уникальные значения, которые вы хотите. Вам просто нужен массив. В 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 голосов
/ 05 декабря 2011
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....
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...