- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
_.uniqWith(newSelectedModelList, _.isEqual);
对我的性能有很大的影响。
我正在比较一个包含 2100 个元素的数组。每个元素都有 { name: 'foo', year: '1993'}
, { name: 'foo', year: '1993'}
, { name : 'foo', year: '2000'}
并删除具有相同 name
和 year
的重复项。
有没有更快的方法来做到这一点?或者比 lodash 更好的工具?
最佳答案
您可以使用 ES6 filter
和 Set
。以下函数传递一个 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/
我有一个对象数组,如: [{id: '123', name: 'John', someKey:'1234'}, {id: '123', name: 'John', someKey:'12345'}]
_.uniqWith(newSelectedModelList, _.isEqual); 对我的性能有很大的影响。 我正在比较一个包含 2100 个元素的数组。每个元素都有 { name: 'foo'
我在 Lodash 中使用 _.uniqWith 从约 6,000 个对象的数组中删除重复对象: let uniqColors = _.uniqWith(colorCollection, _.isEq
您好,我正在使用 lodash uniqWith 方法删除数组中具有相同 ID 的重复项。 但是 lodash 保留第一个重复项。但我不想保留最后一个重复的项目。 我能为此做什么? var resul
我是一名优秀的程序员,十分优秀!