Javascript 如何用lodash u.filter与.forEach重构for循环?

Javascript 如何用lodash u.filter与.forEach重构for循环?,javascript,arrays,angularjs,for-loop,lodash,Javascript,Arrays,Angularjs,For Loop,Lodash,一,;我正在尝试实现lodash来重构这个for循环,最好的方法是什么呢 for(var i = 0; i < origPam.length; i ++){ if(origPam[i].editor.mapped !==newPam[i].editor.mapped){ $scope.$apply(); } } for(变量i=0;i

一,;我正在尝试实现lodash来重构这个for循环,最好的方法是什么呢

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

老实说,您可能应该对此进行优化(多次调用$apply没有意义)

您不应该使用
filter()
,除非您计划使用结果。例如,您可以使用
filter()
,然后使用
forEach()
对这些结果进行迭代、调用方法或执行其他操作


或者,您可以将其保持简单并作为
forEach()
回调的第一步进行过滤。由于您没有生成稍后使用的结果,因此这可能是最简单的方法。

似乎您有两个输入数组。我将首先使用
\uuz.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 */})


因为您不能在
.forEach
中使用
break
,所以您可以使用
.takeWhile
先过滤掉内容。

为什么要实现自己的摘要?无论如何,由于没有中断,
forEach
应该很好,因此您不会在过程中创建任何新集合。我更喜欢
过滤器
映射
减少
方法,它们更容易编码并告诉您发生了什么,不像
forEach
的模糊
。你必须用lodash吗?为什么不使用普通的老JavaScript
filter
?自从JavaScript从原始焦油坑爬出来以来,普通的老JavaScript
forEach
有什么问题吗?@tadman遗憾的是,原始软泥只在IE9的黎明时才消退。也就是说,你可以在一个幸福的基础上填满你的帐篷,然后过着舒适的生活。
_(_.zip(origPam, newPam))
  .filter(([origPem, newPem]) => origPem.editor.mapped !== newPem.editor.mapped)
  .forEach(([origPem, newPem]) => {/* do stuff */})