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

时间:2015-04-07 12:46:38

标签: javascript lodash

考虑到这两个片段,效率会更高(考虑大约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

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

2 个答案:

答案 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

enter image description here