Javascript 在检查一个值然后写入另一个值的情况下,对u.forEach进行过滤有什么好处吗?

Javascript 在检查一个值然后写入另一个值的情况下,对u.forEach进行过滤有什么好处吗?,javascript,lodash,ecmascript-5,Javascript,Lodash,Ecmascript 5,我对JavaScript相当陌生,所以我非常依赖eslint和插件来指导我。我是为一个有lodash 3.9.3的环境而写的,它必须使用Chrome 40,也就是es5 我有一些代码如下: \u.forEach(star.system()。行星,函数(world){ if(world.starting_planet===真) if(世界.行星){ world.planet.shuffleLandingZones=true; }else-world.generator.shuffleLanding

我对JavaScript相当陌生,所以我非常依赖eslint和插件来指导我。我是为一个有lodash 3.9.3的环境而写的,它必须使用Chrome 40,也就是es5

我有一些代码如下:

\u.forEach(star.system()。行星,函数(world){
if(world.starting_planet===真)
if(世界.行星){
world.planet.shuffleLandingZones=true;
}else-world.generator.shuffleLandingZones=true;
});
eslint plugin lodash
抛出消息“preference.filter or.some over a u.forEach中的if语句”,链接到其文章

在我看来,
\ forEach
似乎是这里的正确选择,因为我想在现有数组中设置一个新值。但我试了一下,想出了

var startingplaners=u.filter(star.system().planers{
启动地球:是的,
});
_.forEach(启动行星、功能(行星){
如果(行星,行星){
planets.planet.ShuffelandingZones=真;
}else planets.generator.shuffleLandingZones=true;
});

但是我看了一下,我想,这不是因为我现在迭代两个数组而不是一个数组,所以效率就降低了吗?我错过什么了吗?我是不是应该忽略这件事?我是否使用了
过滤器来实现我的目标是错误的?

您可以选择忽略这里的林特警告-
过滤器只应在目标是创建另一个数组时使用,您的代码基本上是正确的

这不是因为我现在迭代两个数组而不是一个数组,所以效率更低吗

不一定,因为lodash可以避免创建临时数组。我建议将此写为

_(star.system().planets).filter({
    starting_planet: true,
}).forEach(function (world) {
    var planet = world.planet || world.generator;
    planet.shuffleLandingZones = true;
});

您可以选择忽略此处的linter警告-
filter
仅当目标是创建另一个数组时才应使用,您的代码基本上没有问题

这不是因为我现在迭代两个数组而不是一个数组,所以效率更低吗

不一定,因为lodash可以避免创建临时数组。我建议将此写为

_(star.system().planets).filter({
    starting_planet: true,
}).forEach(function (world) {
    var planet = world.planet || world.generator;
    planet.shuffleLandingZones = true;
});

也许可以试试uu.map?当然,我对第一个代码段中的格式设置和
{}
用法存在问题,但该版本只循环一次。我可能更喜欢它。然而,这是我的观点。或者只使用本机数组函数,forEach、map、filter和exc:)为什么还要使用lodashD(抱歉打扰了,我只是不太喜欢uz)是的,我会选择本机数组方法,特别是因为它们允许像
startingplants.filter().foreach()这样的链接。我认为eslint给出这个消息是为了鼓励更好的代码可读性,虽然性能有所下降,但可能negligible@Halil切卡尔主要是出于习惯,因为我的Chromium版本限制在native中不支持很多东西,所以不得不依靠它。早些时候,我正在使用Chromium 2x。也因为我学习了一些使用lodash的现有代码,所以这是我第一次遇到的。在以后的工作中,我将切换,但为了内部一致性,我坚持使用lodash。也许可以尝试使用u.map?当然,我对第一个代码段中的格式和
{}
用法存在问题,但该版本只循环一次。我可能更喜欢它。然而,这是我的观点。或者只使用本机数组函数,forEach、map、filter和exc:)为什么还要使用lodashD(抱歉打扰了,我只是不太喜欢uz)是的,我会选择本机数组方法,特别是因为它们允许像
startingplants.filter().foreach()这样的链接。我认为eslint给出这个消息是为了鼓励更好的代码可读性,虽然性能有所下降,但可能negligible@Halil切卡尔主要是出于习惯,因为我的Chromium版本限制在native中不支持很多东西,所以不得不依靠它。早些时候,我正在使用Chromium 2x。也因为我学习了一些使用lodash的现有代码,所以这是我第一次遇到的。对于未来的工作,我将切换,但为了内部一致性,我坚持使用lodash。