Javascript函数来获取两个数字之间的差异

时间:2010-07-01 10:04:25

标签: javascript function

我想要一个简单的Javascript函数来获取两个数字之间的差异,使foo(2, 3)foo(3,2}返回相同的差异1。

8 个答案:

答案 0 :(得分:112)

var difference = function (a, b) { return Math.abs(a - b); }

答案 1 :(得分:35)

使用三元

function foo(num1, num2){
  return (num1 > num2)? num1-num2 : num2-num1
}

或者

function foo(num1, num2){
  if num1 > num2
    return num1-num2
  else
    return num2-num1
}

答案 2 :(得分:12)

似乎奇怪的是定义一个全新的函数,只是为了在调用它时不必使用减号而不是逗号:

Math.abs(a - b);

VS

difference(a, b);

(差异调用另一个你定义为调用的函数,它返回第一个代码示例的输出)。我只是在Math对象上使用内置的abs方法。

答案 3 :(得分:7)

这意味着你想要返回绝对值。

function foo(num1 , num2) {
   return Math.abs(num1-num2);
} 

答案 4 :(得分:4)

function difference(n, m){
    return Math.abs(n - m)
}

答案 5 :(得分:1)

TypeScript,如果有兴趣:

public getDiff(value: number, oldValue: number) {
    return value > oldValue ? value - oldValue : oldValue - value;
}

答案 6 :(得分:0)

我不知道如何在一个如此常见的问题上做到这一点,但是在某些情况下,我在这里找到的所有答案都是错误的。

如果两个数字都在零的同一侧,那么正确的答案是正确的;但是,如果两个数字不在零的同一侧,则必须将其绝对值相加而不是相减。

function diff( x, y ) {

    if ( Math.sign( x ) === Math.sign( y ) ) {

        return Math.abs( x - y );

    } else {

        return Math.abs( x ) + Math.abs( y );

    };

};

diff( 2, 2 ) // 0
diff( -2, -2 ) // 0
diff( -2, 2 ) // 4
diff( 2, -2 ) // 4

math.stackexchange.com上的解决方案:https://math.stackexchange.com/a/1893992

答案 7 :(得分:0)

定义四个函数我做了一个小基准,令人惊讶

fn1 = (a,b)=>(a>b)?a-b:b-a;
fn2 = (a,b)=>{let c= a-b;return c>0?c:-c;}
fn3 = (a,b)=>Math.abs(a-b)
fn4 = (a,b)=>Math.max(a-b, b-a)


for(let fn of [ fn1, fn2, fn3, fn4])
 executionTime(()=>{console.log(fn);for(let i=0;i<1_000_000;i++)fn(500_000,i)})
 

 
 
 
 function executionTime(cb){//calculate performance
    const t0 = performance.now();
    cb();
    const t1 = performance.now();
    console.log(`cb took ${t1 - t0} milliseconds.`);
}

以下是 100 万次迭代的结果:

  1. cb 耗时 11.129999998956919 毫秒。
  2. cb 耗时 53.420000011101365 毫秒。
  3. cb 耗时 47.40000003948808 毫秒。
  4. cb 耗时 48.20000007748604 毫秒。

但不幸的是,这些都是错误的结果,我的意思是在控制台上一一执行结果:

  1. 6.9 毫秒 11.7 7.0 4.4
  2. 7.5 毫秒 4.4 6.4 4.5
  3. 7.8 毫秒 5.1 6.2 6.8
  4. 3.9 毫秒 6.3 5.2 5.2

我认为在循环时,每次迭代后垃圾都会收集,而其他函数则尽力而为。在逐个执行时,fn2 排在第二位,同时使用了额外的变量(vm 是用寄存器优化的?)。