Lodash:_.filter 和 _.each 之间的性能差异

Lodash: difference in performance between _.filter and _.each

鉴于这两个片段,什么会更有效(考虑大约 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

你知道差异的来源是什么吗?

他们基本上都在做同样的事情。这两个函数将使用相同样式的 while 循环来遍历集合。从性能的角度来看,您是在同类比较。从功能的角度来看,filter() 更简洁,更适合手头的任务。

Lodash 是一个很棒的库,可以执行与 uniq、filter 和 each.The 等实用程序相关的任务,_.each 的实现在 lodash 中比 angular.forEach 更有效非常可观。 但是 _.each 和 _.filter 是做相同工作的方法,但是当 json 结构简单,尺寸小且语法位 efficient.where [=21= 时,过滤器非常有效] 当 JSON 又大又复杂时效率更高。

这是下面的 link,我在其中记下了 .each 和 .timer 的执行时间。 https://stackblitz.com/edit/angular-8cnfvg?file=src%2Fapp%2Fapp.component.ts