Javascript 循环变量表达式的数学处理

Javascript 循环变量表达式的数学处理,javascript,math,for-loop,language-agnostic,Javascript,Math,For Loop,Language Agnostic,我正在用JS编写一个程序,我觉得我在重复代码,这不好。我试图避免一个if-then-else块,该块有两个类似的for循环,并在没有if-then-else的情况下重新编写它,只使用一个for循环 考虑这一点:最小值具有值0最大值具有值10。如果new\u value小于old\u value我想执行一个从minimum到new\u value的for循环,否则我想从max到new\u value 让我们看看它的实际应用,比如说javascript(语言不可知的答案是受欢迎的,并且是经过投票的,

我正在用JS编写一个程序,我觉得我在重复代码,这不好。我试图避免一个
if-then-else
块,该块有两个类似的
for循环
,并在没有
if-then-else
的情况下重新编写它,只使用一个
for循环

考虑这一点:
最小值
具有值
0
<代码>最大值具有值
10
。如果
new\u value
小于
old\u value
我想执行一个从
minimum
new\u value
的for循环,否则我想从
max
new\u value

让我们看看它的实际应用,比如说javascript(语言不可知的答案是受欢迎的,并且是经过投票的,但不会给你额外的cookie)

var最小值=0;
var最大值=10;
var old_值=5;
/*var new_value=从用户输入中获取*/

if(new_valueEdit:没有看到关于不在变量中使用if/else的原始内容。那么为什么不这样做呢?只需从0到10,使用该值或10减去该值,具体取决于条件

for(var j = 0; j <= 10; j++) {
    var i = new_value < old_value ? j : 10 - j;

    // whatever
}

for(var j=0;j你可以为了好玩而滥用三元运算符:

var minimum = 0;
var maximum = 10;
var old_value = 5;
var new_value = 7;
/* var new_value = taken from user input whatever ... */

var check =(new_value<old_value);
var foo1 = function () { console.log("foo1")  }
var foo2 = function () { console.log("foo2")  }


for(i=check?minimum:maximum;
        check?(i<new_value):(i>new_value);
        check?i++:i--)
{
    check?foo1():foo2();
}
var最小值=0;
var最大值=10;
var old_值=5;
var新值=7;
/*var new_value=从用户输入中获取*/
var check=(new_value第二个循环必须反向迭代吗?如果不是,您可以简单地使用

var i0 = new_value<old_value ? minimum : new_value+1;
var i1 = new_value<old_value ? new_value : maximum+1;

for(i=i0;i<i1;++i)
{
    //whatever
}
var i0=new_值我做到了

有了这个
+(旧值>新值)
而不是得到
true/false
我得到的是
1/0
。我使用
1
0
作为乘法器来模拟
if-then-else
功能

让我们假设

var minimum = 0;
var maximum = 10;
var old_value = 5;
对于(表达式1;表达式2;表达式3)

对于表达式1:

如果新值大于旧值,则我们需要最小值 如果新值小于旧值,则需要最大值

根据上述条件,我将最大值乘以零(最大值*(+(旧值>新值))

根据上述条件,我用
(最小值*(+(旧值新值)))+(最小值*(+(旧值旧值
最大值
if
新值<旧值

对于表达式2:

i!=new\u值;
simple。(我们只需确保最大值大于new\u值,最小值小于new\u值,否则我们会有一个无止境的循环。)

对于表达式3:

如果新值大于旧值,则需要i=i+1

如果新值小于旧值,则需要i=i-1

这个

(+(旧值新值)+1))

将给出2+-1=1或1+-2=-1,因此我们在表达式3中使用它作为

i=i+(+(旧值新值)+1))

完整代码:

var最小值=0;
var最大值=10;
var old_值=5;
var new_value=3;//更改此值
//如果新值大于旧值,则for循环从最大值向下到新值(不包括新值)
//如果新值小于旧值,则for循环从最小值到新值(不包括新值)

对于(i=(最大值*(+(旧值>新值)))+(最小值*(+(旧值)),不幸的是,它必须反向迭代,“向下”。这正是问题所在:(@Sharky:好的。如果我编辑的尝试不符合要求,那么你最好还是使用你原来的解决方案!刚刚发布了一个解决方案,通知你检查,因为你也尝试了:Dhaha,顽皮顽皮,我也这么认为,但我们都知道这是一个
如果然后其他
那里:Djust发布了一个解决方案,通知你检查它你也尝试过:D@Sharky这本来是一个笑话…;)刚刚发布了一个解决方案,通知您检查它,因为您也尝试了:D
var i0 = new_value<old_value ? minimum : new_value+1;
var i1 = new_value<old_value ? new_value : maximum+1;

for(i=i0;i<i1;++i)
{
    //whatever
}
var i0 = new_value<old_value ? minimum : maximum;
var d  = new_value<old_value ? 1 : -1;

for(i=i0;i!=new_value;i+=d)
{
    //whatever
}
var i0 = new_value<old_value ? minimum : maximum;
var d  = new_value<old_value ? 1 : -1;

for(i=i0;d*i<d*new_value;i+=d)
{
    //whatever
}
var minimum = 0;
var maximum = 10;
var old_value = 5;
var minimum = 0;
var maximum = 10;
var old_value = 5;


var new_value = 3; // change this value



// if new value is bigger than old value then for loop from maximum downto new_value (dont include new value)
// if new value is smaller than old value then for loop from minimum upto new_value (dont include new value)

for(i=(maximum*(+(old_value>new_value)))+(minimum*(+(old_value<new_value)));i!=new_value;i=i+(+(old_value<new_value)+1)+(-1*(+(old_value>new_value)+1)) )
{
    alert("Iteration:"+i);  
}