【问题标题】:Javascript efficiency -- 'forEach' with multiple 'if's or 'if's only allowing 'forEach'Javascript 效率 - 'forEach' 与多个 'if' 或 'if' 只允许 'forEach'
【发布时间】:2018-03-02 03:11:20
【问题描述】:

我的问题是这样的。假设我有一个名为A 的数组,我只希望根据条件进行某些操作。什么更有效:

我)

A.forEach(x => { 
  if (condition1) {
    //do stuff1
  } 
  else if (condition2) {
    //do stuff2
  }
  else if (condition3) {
    //do stuff3
  } 
});

二)

if (condition1) {
  A.forEach(x => {
    //do stuff1}
  )}
}
else if (condition2) {
  A.forEach(x => {
    //do stuff2}
  )}
}
else if (condition3) {
  A.forEach(x => {
    //do stuff3}
  )}
}

或者有更好的方法来做我所追求的吗?谢谢!

【问题讨论】:

  • 我看不出我和II怎么一样? II 将为每个运行多次。我只会 foreach 一次。
  • 我还有一个问题要问你,条件是影响整个数组还是只适用于数组的每个索引?,前者使用第二种方法,后者使用第一种方法
  • 它适用于数组的一些元素,所以我想我会选择第二种方法:-)
  • 我投票给 I. 或 II。或者......我不知道,取决于我猜的天气
  • 您需要对数组元素的每次迭代进行条件检查,即这些条件是否涉及x?如果不是,那么 II 显然更胜一筹。

标签: javascript arrays performance foreach conditional


【解决方案1】:

先测试条件,然后调用相关的forEach。当然,假设条件与 A 中的特定索引无关。如果条件真实性取决于索引,那么您必须评估 forEach 中的条件

即答案取决于什么构成conditionN

【讨论】:

  • 这是一个答案吗?好像是评论。
【解决方案2】:

根据提供的信息,不知道是否有更有效的算法。

您的第二个选项只检查条件 1、2 和 3 一次,但选项一将它们全部检查 n 次。选项 II 看起来像更多代码,但速度更快。

【讨论】:

    【解决方案3】:

    我的建议是使用 Switch 语句更好。

    在这里阅读:Performance of if-else, switch or map based conditioning

    A.forEach(x => {     
       //set values for condition                                        
       case condition1:
          //your code
          break;
       case condition2:
          //your code
          break;
       case condition3:
          //your code
          break;                                                                
    }
    

    【讨论】:

    • 小心 - 虽然对于所有将相同变量与文字值列表进行比较的条件,switch 确实比 if/else 语句更好,但我们不知道条件是这样的甚至可以使用 switch 语句。如果条件不是对同一语句的所有评估怎么办? switch 语句不适用于 condition1 = x.parameter1 == true, condition2 = x.parameter2 == true。
    猜你喜欢
    • 2012-05-11
    • 2015-07-20
    • 2021-04-16
    • 2014-02-11
    • 2017-09-27
    • 2016-11-30
    • 1970-01-01
    • 2011-04-01
    • 2022-09-28
    相关资源
    最近更新 更多