我正在用JS编写程序,我觉得我在重复代码,这不好。我正在尝试避免使用具有两个类似if then else
的{{1}}块,并仅使用一个for loop
重新编写if then else
。
请注意:for loop
的值为minimum
。 0
的值为maximum
。如果10
小于new_value
,我想执行从old_value
到 minimum
的for循环,否则我想从{{1}执行它} DOWNto new_value
让我们看看它的实际效果,让我们说javascript(语言不可知的答案是受欢迎的和赞成的 - 但不会给你一个额外的cookie)
maximum
我有一种感觉,这两个new_value
相似,足以在数学方法中写成一个。尝试使用绝对值var minimum = 0;
var maximum = 10;
var old_value = 5;
/* var new_value = taken from user input whatever ... */
if(new_value<old_value)
{
for(i=minimum;i<new_value;i++)
{
// whatever
}
}
else
{
for(i=maximum;i>new_value;i--)
{
// whatever
}
}
for loop
,但没有运气。
我不想使用Math.abs()
设置其他帮助变量来提供适当的值。
那么,问题是什么:我想知道这是否可以在一个Math.max.apply()
中重写,而不是嵌套在if then else
中。
使用内置js函数的完整解决方案将授予您额外的Cookie。
答案 0 :(得分:0)
编辑:没有看到关于不使用if / else和变量的原始内容。为什么不做这样的事呢?只需从0到10,使用该值或10减去该值,具体取决于条件。
for(var j = 0; j <= 10; j++) {
var i = new_value < old_value ? j : 10 - j;
// whatever
}
将min,max和increment分配为变量,根据if条件定义它们,然后在for循环中使用它们:
var old_value = 5, start, end, inc;
if(new_value<old_value) {
start = 0;
end = 10;
inc = 1;
} else {
start = 10;
end = 0;
inc = -1;
}
for( i = start;i >= start && i <= end; i += inc) {
// whatever
}
答案 1 :(得分:0)
你可以滥用三元运算符只是为了好玩:
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();
}
答案 2 :(得分:0)
第二个循环是否有反向迭代?如果没有,你可以简单地使用
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
}
答案 3 :(得分:0)
我做到了!
使用此+(old_value>new_value)
而不是true/false
我得到1/0
。我使用1
和0
作为乘数来模拟if then else
功能。
让我们假设
var minimum = 0;
var maximum = 10;
var old_value = 5;
有(表达式1;表达式2;表达式3)
表达式1:
如果新值大于旧值,那么我们需要最小值 如果新值小于旧值,那么我们需要最大值
根据上述条件,(maximum*(+(old_value>new_value)))
根据(minimum*(+(old_value<new_value))
通过添加这两个,总和是我应该得到的! (maximum*(+(old_value>new_value)))+(minimum*(+(old_value<new_value)))
如果minimum
new_value > old value
和maximum
new_value < old_value
,则会i!=new_value;
表达式2:
而(+(old_value<new_value)+1)+(-1*(+(old_value>new_value)+1))
简单。 (我们必须确保最大值大于new_value,最小值小于new_value或者我们有无限循环。)
表达式3:
如果新值大于旧值,那么我们需要i = i +1
如果新值小于旧值,那么我们需要i = i -1
此
i=i+(+(old_value<new_value)+1)+(-1*(+(old_value>new_value)+1))
会给出2 + -1 = 1 或1 +( - 2)= -1 ,所以我们只需在expression3中使用它
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);
}
完整代码:
for
另一个问题是,如果这实际上比仅仅在if then else
中写两个+true
更好...无论如何我很开心。我得到了饼干:D:D
希望有人会在某种程度上发现1
在javascript中+false
和0
提供{{1}}这一事实