Javascript 循环变量表达式的数学处理
我正在用JS编写一个程序,我觉得我在重复代码,这不好。我试图避免一个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(语言不可知的答案是受欢迎的,并且是经过投票的,
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);
}