Javascript 这种正/负检查可以简化吗?

Javascript 这种正/负检查可以简化吗?,javascript,Javascript,我主要想检查newValue是否超过targetValue。但是targetValue可以是正数或负数,因此如果(newValue0); 如果(isTargetPositive&&newValuetargetValue) newValue=math.MoveToward(newValue,targetValue,1); 其他的 //做点别的 } 我能想到的唯一一件事就是删除isTargetPositive变量,并将if语句替换为以下内容: if ( targetValue > 0 ? ne

我主要想检查newValue是否超过targetValue。但是targetValue可以是正数或负数,因此如果
(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) 正匹配 newValue 测试(输入:-1) !正匹配 新值>目标值-匹配

+ve或-ve整数,它将与IF匹配

ISTarget正数和新值测试(输入:5)
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
        }
    }
正匹配 newValue 测试(输入:-1) !正匹配 新值>目标值-匹配

+ve或-ve整数,它将与IF匹配

ISTarget正数和新值
var 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&&current_val>0) || (!obj.ActiveColor&&current_val<0)){}
我知道你不需要缓存变量,但在我的情况下,我打算稍后使用它,所以我缓存了它,我的代码太复杂了,我甚至不能给我的变量起一个正确的名字,我也不完全确定这是否会帮到你,如果我不能将它翻译成你的代码,很可能你两者都不能,但我会再次尝试理解我的代码,并对我的答案进行编辑


注意:我的代码被包装在
if(current_val){…}
中,因此该值是除
0
之外的任何值。这与我更改的代码中的情况几乎相同:

if((obj.ActiveColor&&current_val>0) || (!obj.ActiveColor&&current_val<0)){}
我知道你不需要缓存变量,但在我的情况下,我打算稍后使用它,所以我缓存了它,我的代码太复杂了,我甚至不能给我的变量起一个正确的名字,我也不完全确定这是否会帮到你,如果我不能将它翻译成你的代码,很可能你两者都不能,但我会再次尝试理解我的代码,并对我的答案进行编辑

注意:我的代码被包装在
if(current_val){…}
中,因此该值是除
0以外的任何值

您正在将“newValue”初始化为零,因此如果“targetValue”大于零,“newValue”将始终小于“targetValue”。