Javascript 如何用lodash u.filter与.forEach重构for循环?
一,;我正在尝试实现lodash来重构这个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
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吗?为什么不使用普通的老JavaScriptfilter
?自从JavaScript从原始焦油坑爬出来以来,普通的老JavaScriptforEach
有什么问题吗?@tadman遗憾的是,原始软泥只在IE9的黎明时才消退。也就是说,你可以在一个幸福的基础上填满你的帐篷,然后过着舒适的生活。
_(_.zip(origPam, newPam))
.filter(([origPem, newPem]) => origPem.editor.mapped !== newPem.editor.mapped)
.forEach(([origPem, newPem]) => {/* do stuff */})