与_.forEach相比,_。filter有什么优势?

时间:2020-07-31 23:00:42

标签: javascript lodash ecmascript-5

我对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错误实现了目标?

1 个答案:

答案 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;
});