gpt4 book ai didi

javascript - 使用 _.uniqWith 删除重复对象的 Lodash 性能下降

转载 作者:行者123 更新时间:2023-11-29 20:55:35 25 4
gpt4 key购买 nike

我在 Lodash 中使用 _.uniqWith 从约 6,000 个对象的数组中删除重复对象:

let uniqColors = _.uniqWith(colorCollection, _.isEqual);

数组中的示例对象如下所示:

{
r: 122,
g: 44,
b: 216
}

平均处理时间约为 8500 毫秒。有没有办法使用 _.uniqBy() 或其他 Lodash 函数来加速此类函数?

最佳答案

这是一个使用 vanilla JavaScript 的解决方案,它需要 4 毫秒才能在我机器上的 Chrome 中处理 6000 个随机条目。

我将颜色转换为它们的等效整数,然后使用 Set跟踪重复项:

const getRandomData = (n) => {
const result = [];

for (let i = 0; i < n; i++) {
result.push({
r: Math.floor((Math.random() * 256)),
g: Math.floor((Math.random() * 256)),
b: Math.floor((Math.random() * 256))
});
}

return result;
}

const hash = (color) => (color.r << 16) + (color.g << 8) + color.b;

const n = 6000;
const data = getRandomData(n);

const start = performance.now();

const set = new Set();
const result = [];

for (let i = 0; i < n; i++) {
const color = data[i];
const key = hash(color);

if (!set.has(key)) {
set.add(key);
result.push(color);
}
}

const end = performance.now();

console.log(`Removed ${n - result.length} duplicates from ${n} items`);
console.log(`Operation took ${end - start} ms`);

关于javascript - 使用 _.uniqWith 删除重复对象的 Lodash 性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com