什么是最好的选择,条件内的循环或循环内的条件?

What is the best option, a loop inside a conditional or a conditional inside a loop?

似乎很明显,但假设我们有 2 个数组,如果特定条件为真,我想将一些对象推入其中。一般来说,这样比较好:

let arr1 = [];
let arr2 = [];
if(someCond){
  for(let i=0;i<5;i++){
    arr1.push(i)
  }
}
else{
  for(let i=0;i<5;i++){
    arr2.push(i)
  }
}

或者像这样:

let arr1 = [];
let arr2 = [];
for(let i=0;i<5;i++){
  if(cond) arr1.push(i)
  else arr2.push(i)
}

我认为第二个选项看起来更短,但可能性能更差。

循环执行一次比数组的长度更好,所以这是你的更好选择

if(someCond){
  for(let i=0;i<5;i++){
    arr1.push(i)
  }
}
else{
  for(let i=0;i<5;i++){
    arr2.push(i)
  }
}

因为你只执行一次条件语句..

最好的是:

const arr1 = [];
const arr2 = [];
const cond = Math.random() > 0.5;
const arr = cond ? arr1 : arr2;

for(let i = 0; i < 5; ++i){
  arr.push(i);
}

console.log('arr1', arr1);
console.log('arr2', arr2);

作为处理此代码的路径,我得到以下内容
对于数组中的每一项,我必须检查条件
或者没有第一个选项,对于这种情况,我必须这样做,否则,对每个项目都这样做。

第一个选项的性能更好,但是,除非您使用的是 BigData,否则我认为这根本不会影响处理,因为两者都是要处理的简单指令。

这当然取决于您循环的 itens 数量和条件的复杂性。

如果在条件中使用函数,它会占用更多内存,所以第一个选项会更好。

如果您的条件简单,物品collection不是太大,您可以随意使用任何东西。

假设没有优化,第二个选项确实需要更多的计算。因此可以推断,第二种选择在性能上确实更差。例如,if 子句中的条件会针对 table 的每个元素进行评估,在最坏的情况下,它可能会导致代码中出现许多 'jumps'。 如果数组的大小确实是5,那么效果可以忽略不计。

另一种方法如下。

let arr1 = [];
let arr2 = [];
let arr3=someCond?arr1:arr2;


  for(let i=0;i<5;i++){
    arr3.push(i)
  }