[英]Parsing JSON to exclude duplicates Node.JS
首先,我是NodeJS和JavaScript的新手,因此將非常感謝您的幫助。
我的目標是能夠解析一個csv文件,以便可以查看每月有多少用戶登錄。 為了做到這一點,我使用了npm“ CSVtoJSON”將csv文件轉換為JSON格式。 這是我從JSON文件中獲得的信息,但有8000多個條目。 下面是一個片段。
[
{ date: '2015-04-09T19:30:22.213795+00:00',
'email address': '',
'full name': 'Canton Bashkin',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Canton Bashkin logged in' },
{ date: '2015-04-08T00:34:42.261728+00:00',
'email address': '',
'full name': 'Sha Phad',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Sha Phad logged in' },
{ date: '2015-04-07T23:31:32.559654+00:00',
'email address': '',
'full name': 'Canton Bashkin',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Canton Bashkin logged in' },
{ date: '2015-04-07T23:31:02.408628+00:00',
'email address': '',
'full name': 'Sha Phad',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Sneha Phadke logged in'}
]
我的代碼:
//Converter Class
var Converter = require("csvtojson").Converter;
var converter = new Converter({});
var allUsers = [];
//end_parsed will be emitted once parsing finished
function parseUsers() {
converter.on("end_parsed", function (jsonArray) {
for (var i = 0; i < jsonArray.length; i++) {
var users = jsonArray[i]['full name'];
if (jsonArray[i]['action'] === 'LoggedInActivity') {
if (users != 'SD Elements Support' && users != 'Karan Sharala' && users != 'Rick Bogans'
&& users != 'Kanal Bhatya' && users != 'Sanka Saja' && users != 'Kiiko Plash') {
allUsers.push(jsonArray[i]);
}
}
}
console.log(allUsers);
});
}
parseUsers();
//read from file
require("fs").createReadStream("log.csv").pipe(converter);
我一直在努力找出解析JSON的最佳方法,這樣就不會在數組中添加相同名稱的重復項。 如果我完全錯了,請指出正確的方向。 謝謝你們的幫助。
得到名字后,我需要將它們分成幾個月,我不太確定該怎么做。 任何幫助將不勝感激!
使用稱為unique
的對象來跟蹤已添加的字符串
var unique = Object.create(null); // empty object, no inheritance
for (var i = 0; i < jsonArray.length; i++) {
var users = jsonArray[i]['full name'];
if (jsonArray[i]['action'] === 'LoggedInActivity') {
if (!(users in unique)) { // not seen this `full name` before
unique[users] = allUsers.push(jsonArray[i]);
}
}
}
如果您覺得它更容易理解,可以將其與過濾器結合使用,在此特定示例中,它並不太干凈。 很大的陣列也可能會使使用過濾器的功能開銷的成本過於昂貴。
var unique = Object.create(null);
allUsers = jsonArray.filter(function (e) {
if (e['action'] === 'LoggedInActivity' && !(e['full name'] in unique)) {
return unique[e['full name']] = true;
}
return false;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.