gpt4 book ai didi

javascript - lodash _.uniqWith 性能下降

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

_.uniqWith(newSelectedModelList, _.isEqual); 对我的性能有很大的影响。

我正在比较一个包含 2100 个元素的数组。每个元素都有 { name: 'foo', year: '1993'}, { name: 'foo', year: '1993'}, { name : 'foo', year: '2000'} 并删除具有相同 nameyear 的重复项。

有没有更快的方法来做到这一点?或者比 lodash 更好的工具?

最佳答案

您可以使用 ES6 filterSet。以下函数传递一个 Set 作为回调的上下文 (this):

function uniques(arr) { 
return arr.filter(function ({year, name}, key) {
return !this.has(key = year + name) && this.add(key);
}, new Set());
}
// Sample data
var newSelectedModelList = [
{ name: 'foo', year: '1993'},
{ name: 'foo', year: '1993'},
{ name: 'foo', year: '2000'}
];
// Output result
console.log(uniques(newSelectedModelList));

如果您希望在给定变量中进行过滤,而不是在函数返回的新数组中进行过滤,我建议只清空给定数组并重新填充它:较长的数组比拼接复制出来,一个接一个:

function uniques(arr) { 
var res = arr.filter(function ({year, name}, key) {
return !this.has(key = year + name) && this.add(key);
}, new Set());
// replace content in arr:
arr.splice(0, arr.length, res);
}
// Sample data
var newSelectedModelList = [
{ name: 'foo', year: '1993'},
{ name: 'foo', year: '1993'},
{ name: 'foo', year: '2000'}
];
// replace in-place:
uniques(newSelectedModelList);
// Output result
console.log(newSelectedModelList);

我在 JS fiddle 上发布了与我写这篇文章时 guest271314 had posted 的解决方案的性能比较。在我的 PC 上,控制台输出报告了这些测量值:

number of original elements:  30000
solution count duration
----------- ----- --------
trincot 14456 00020.14
guest271314 14456 00351.99

计数列给出了最终结果中保留的唯一元素的数量。这个数字可以在不同的运行中改变,因为输入数组有点随机。最后一列以毫秒为单位给出了使用的时间。

关于javascript - lodash _.uniqWith 性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40535772/

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