什么是最好的选择,条件内的循环或循环内的条件?
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)
}
似乎很明显,但假设我们有 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)
}