Javascript 这种正/负检查可以简化吗?
我主要想检查newValue是否超过targetValue。但是targetValue可以是正数或负数,因此如果Javascript 这种正/负检查可以简化吗?,javascript,Javascript,我主要想检查newValue是否超过targetValue。但是targetValue可以是正数或负数,因此如果(newValue0); 如果(isTargetPositive&&newValuetargetValue) newValue=math.MoveToward(newValue,targetValue,1); 其他的 //做点别的 } 我能想到的唯一一件事就是删除isTargetPositive变量,并将if语句替换为以下内容: if ( targetValue > 0 ? ne
(newValue
不一定有效
我是按照下面的方式编码的,我可能想得太多了,但我想知道是否有办法更优雅地重写if检查
var newValue = 0;
function ChangeValue ( targetValue : int )
{
var isTargetPositive = ( targetValue > 0 );
if ( isTargetPositive && newValue < targetValue || !isTargetPositive && newValue > targetValue )
newValue = math.moveTowards( newValue, targetValue, 1 );
else
// Do something else
}
var newValue=0;
函数ChangeValue(targetValue:int)
{
var isTargetPositive=(targetValue>0);
如果(isTargetPositive&&newValuetargetValue)
newValue=math.MoveToward(newValue,targetValue,1);
其他的
//做点别的
}
我能想到的唯一一件事就是删除isTargetPositive
变量,并将if语句替换为以下内容:
if ( targetValue > 0 ? newValue < targetValue : newValue > targetValue )
if(targetValue>0?newValuetargetValue)
我能想到的唯一一件事就是删除isTargetPositive
变量,并将if语句替换为以下内容:
if ( targetValue > 0 ? newValue < targetValue : newValue > targetValue )
if(targetValue>0?newValuetargetValue)
测试(输入:5)
正匹配
newValuevar newValue = 0;
function ChangeValue ( targetValue )
{
if (
((targetValue > 0) && (newValue < targetValue))
||
((targetValue < 0) && (newValue > targetValue ))
)
{
newValue = math.moveTowards( newValue, targetValue, 1 );
}
else{
// Do something else
}
}
正匹配
newValuevar newValue=0;
var newValue = 0;
function ChangeValue ( targetValue )
{
if (
((targetValue > 0) && (newValue < targetValue))
||
((targetValue < 0) && (newValue > targetValue ))
)
{
newValue = math.moveTowards( newValue, targetValue, 1 );
}
else{
// Do something else
}
}
函数更改值(targetValue)
{
如果(
((targetValue>0)和&(newValuetargetValue))
)
{
newValue=math.MoveToward(newValue,targetValue,1);
}
否则{
//做点别的
}
}
var newValue=0;
函数更改值(targetValue)
{
如果(
((targetValue>0)和&(newValuetargetValue))
)
{
newValue=math.MoveToward(newValue,targetValue,1);
}
否则{
//做点别的
}
}
如果子功能不够清晰,则始终可以创建子功能
function abs_compare(target, number) {
return target != 0 && ((target > 0 && target > number) || target < number);
}
if (abs_higher(targetValue, newValue)) {
newValue = math.moveTowards(newValue, targetValue, 1);
}
功能abs\u比较(目标、编号){
返回目标!=0&((目标>0&&目标>编号)| |目标<编号);
}
如果(abs_更高(目标值、新值)){
newValue=math.MoveToward(newValue,targetValue,1);
}
我也更喜欢target!=0
而不是重复检查它是否优于或低于0,因为在条件语句中更清楚地表明它是禁止值
另外,Pointy说,由于您已将newValue初始化为0,它将始终保持为0,这是当前错误的,因为ChangeValue是一个函数。可以在函数调用之前更改newValue
更新
我可能读得太快了。将目标与0进行比较不会保留您的实际逻辑,这与双重检查相同。无论如何,您仍然可以使用函数
最好的答案是使用条件
target>0?target>number:target
如果不够清晰,则始终可以创建子功能
function abs_compare(target, number) {
return target != 0 && ((target > 0 && target > number) || target < number);
}
if (abs_higher(targetValue, newValue)) {
newValue = math.moveTowards(newValue, targetValue, 1);
}
功能abs\u比较(目标、编号){
返回目标!=0&((目标>0&&目标>编号)| |目标<编号);
}
如果(abs_更高(目标值、新值)){
newValue=math.MoveToward(newValue,targetValue,1);
}
我也更喜欢target!=0
而不是重复检查它是否优于或低于0,因为在条件语句中更清楚地表明它是禁止值
另外,Pointy说,由于您已将newValue初始化为0,它将始终保持为0,这是当前错误的,因为ChangeValue是一个函数。可以在函数调用之前更改newValue
更新
我可能读得太快了。将目标与0进行比较不会保留您的实际逻辑,这与双重检查相同。无论如何,您仍然可以使用函数
最好的答案是使用条件
target>0?target>number:target
这几乎与我更改的情况相同:
if((obj.ActiveColor&¤t_val>0) || (!obj.ActiveColor&¤t_val<0)){}
我知道你不需要缓存变量,但在我的情况下,我打算稍后使用它,所以我缓存了它,我的代码太复杂了,我甚至不能给我的变量起一个正确的名字,我也不完全确定这是否会帮到你,如果我不能将它翻译成你的代码,很可能你两者都不能,但我会再次尝试理解我的代码,并对我的答案进行编辑
注意:我的代码被包装在
if(current_val){…}
中,因此该值是除0
之外的任何值。这与我更改的代码中的情况几乎相同:
if((obj.ActiveColor&¤t_val>0) || (!obj.ActiveColor&¤t_val<0)){}
我知道你不需要缓存变量,但在我的情况下,我打算稍后使用它,所以我缓存了它,我的代码太复杂了,我甚至不能给我的变量起一个正确的名字,我也不完全确定这是否会帮到你,如果我不能将它翻译成你的代码,很可能你两者都不能,但我会再次尝试理解我的代码,并对我的答案进行编辑
注意:我的代码被包装在if(current_val){…}
中,因此该值是除0以外的任何值
您正在将“newValue”初始化为零,因此如果“targetValue”大于零,“newValue”将始终小于“targetValue”。