考虑到这两个片段,效率会更高(考虑大约20,000点的数据集):
_.each
摘录:
var someIds = getIds(); //someIds is an array of ids in data
var resultEach = [];
_.each(data, function(dataItem, index){
if (someIds.indexOf(dataItem.id) != -1){
resultEach.push(dataItem);
}
});
_.filter
摘录:
var someIds = getIds(); //someIds is an array of ids in data
var resultEach = _.filter(data, function (dataItem) {
return someIds.indexOf(dataItem.id) != -1;
});
我已经运行了这个测试:http://jsperf.com/filter-vs-each-lodash 似乎过滤器比_.each快一点...... 这是另一个更复杂的例子: http://jsperf.com/complex-filter-vs-each-lodash
你知道差异的来源是什么吗?
答案 0 :(得分:1)
他们都在做同样的事情。这两个函数将使用相同样式的while
循环来迭代集合。从性能角度来看,您将苹果与苹果进行比较。从功能角度来看,filter()
更简洁,更适合手头的任务。
答案 1 :(得分:-1)
Lodash是一个很棒的库,可以执行与uniq,filter和each之类的实用程序有关的任务。_.each的实现是在lodash上对angular.forEach进行有效的方式,效率非常高。 但是_.each和_.filter是相同的方法,但是当json结构简单,尺寸较小且语法上有点有效时,filter效率很高。而当JSON大而复杂时,_。each效率很高。 / p>
在下面的链接中,我注意到了 .each和 .timer的执行时间。 https://stackblitz.com/edit/angular-8cnfvg?file=src%2Fapp%2Fapp.component.ts