【发布时间】:2021-09-29 02:11:27
【问题描述】:
删除重复项以确保 UserId 唯一的最快方法是什么?大约有 3000 万个 userId 需要检查。
用法
const userIds = {}
const transform = csv.format({ headers: false }).transform((row) => {
if (userIds[row.user_id]) {
console.log(`Found Duplicate ${row.user_id}`);
return false;
} else {
userIds[row.user_id] = 1
}
return row;
});
问题是脚本在大约 20 分钟后挂起。我正在从 CLI 运行脚本。
【问题讨论】:
-
使用Set 可能会更高效。否则不清楚
csv是什么(一个 NPM 包?)以及它是否打算在数百万行上运行。 -
如果您不在乎哪个有重复项,那么您当前的解决方案看起来已经很不错了。我会删除
console.log,因为如果它被称为一堆,它会大大减慢执行时间——与transform中的其他操作相比,日志非常慢。 -
通过this answer 到Get all unique values in a JavaScript array (remove duplicates),在性能方面也可能是一个不错的选择。
-
只是出于好奇,在不检查对象是否有欺骗性的情况下遍历每一行需要多长时间?
标签: javascript node.js