如何使用lodash _.filter vs _.forEach重构for循环?

时间:2015-04-30 21:24:34

标签: javascript arrays angularjs for-loop lodash

我试图实现lodash来重构这个for循环,那么最好的方法是 _。过滤 _。 forEach

for(var i = 0; i < origPam.length; i ++){
                if(origPam[i].editor.mapped !==newPam[i].editor.mapped){
                    $scope.$apply();
                }
            }

2 个答案:

答案 0 :(得分:1)

似乎您有2个输入数组。我将首先使用_.zip将它们配对。

const pams = _.zip(origPam, newPam)

然后按条件过滤。

const pamsToProcess = 
  _.filter(pems, ([origPem, newPem]) => origPem.editor.mapped !== newPem.editor.mapped)

最后_.forEach做事情。

_.forEach(pamsToProcess, ([origPem, newPem]) => {/* do stuff */})

在上方组合

_(_.zip(origPam, newPam))
  .filter(([origPem, newPem]) => origPem.editor.mapped !== newPem.editor.mapped)
  .forEach(([origPem, newPem]) => {/* do stuff */})

由于不能在break中使用_.forEach,因此可以使用_.takeWhile首先过滤掉内容。

答案 1 :(得分:0)

origPam.forEach(function(val, i) {
  if (val.editor.mapped !== newPam[i].editor.mapped)
    // do stuff
});

说实话,你应该优化一下(没有必要多次调用$ apply)