我对JavaScript还是很陌生,所以我非常依赖eslint和插件来指导我。我正在为具有lodash 3.9.3且必须与Chrome 40配合使用(即es5)的环境而写。
我有一些代码如下:
_.forEach(star.system().planets, function (world) {
if (world.starting_planet === true)
if (world.planet) {
world.planet.shuffleLandingZones = true;
} else world.generator.shuffleLandingZones = true;
});
eslint-plugin-lodash
引发消息“在_.forEach内部的if语句上优先使用_.filter或_.some”,并链接至其prefer-filter文章。
在我看来,_.forEach
在这里似乎是正确的选择,因为我想在现有数组中设置一个新值。但是我对此付诸行动,并提出了
var startingPlanets = _.filter(star.system().planets, {
starting_planet: true,
});
_.forEach(startingPlanets, function (planets) {
if (planets.planet) {
planets.planet.shuffleLandingZones = true;
} else planets.generator.shuffleLandingZones = true;
});
但是我看了一下,我想,这不是效率较低,因为我现在要迭代两个数组而不是一个数组?我想念什么吗?我应该忽略这个上的短毛绒吗?我是否使用_.filter
错误实现了目标?
答案 0 :(得分:2)
您可以在此处选择忽略该linter警告-filter
仅在目标是创建另一个数组且您的代码基本上没有问题时才应使用。
那不是效率更低吗,因为我现在要迭代两个数组而不是一个数组?
不一定如此,如破折号implements pipelining可以避免创建临时数组。我建议将其写为
_(star.system().planets).filter({
starting_planet: true,
}).forEach(function (world) {
var planet = world.planet || world.generator;
planet.shuffleLandingZones = true;
});