我想要一个简单的Javascript函数来获取两个数字之间的差异,使foo(2, 3)
和foo(3,2
}返回相同的差异1。
答案 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 万次迭代的结果:
但不幸的是,这些都是错误的结果,我的意思是在控制台上一一执行结果:
我认为在循环时,每次迭代后垃圾都会收集,而其他函数则尽力而为。在逐个执行时,fn2 排在第二位,同时使用了额外的变量(vm 是用寄存器优化的?)。