有没有更优雅的方式来写这些条件?

Is there a more elegant way to write these conditions?

    if(first - second >=2 || first - second <=-2 || first - third >=2 || first - third <=-2 || second - third >=2 || second - third <=-2)

真恶心。

我有三个值需要检查,如果其中任何两个值的差异 >= 2,那么我 运行 完成了一些任务。

我很好奇,你能建议一种让这更愉快的方法吗?谢谢

您可以使用 Math.abs() 将 if 语句分解为 3 个条件。 这是它:

if( Math.abs( first - second ) >= 2 || Math.abs( first - third ) >= 2 || Math.abs( second - third ) >= 2 ) 

Math.abs() 函数 returns 它的参数的绝对值。

Math.abs() 会帮助你,你可以打破几个条件只有 3 个条件。

Math.abs(first - second) >= 2 和类似的其他人

将减法表达式放入数组中并使用 Array#some() 和 Math.abs

if ( [first - second, first - third , second - third].some(n => Math.abs(n) >=2 ) )

一种(客观上)更优雅的方法是利用 Math.abs() 函数:

if (Math.abs(first-second) >= 2 || Math.abs(first-third) >= 2 || Math.abs(second-third) >= 2)){
    // do something
}

一种主观的 (我可能会补充说完全没有必要) 使其在美学上更令人愉悦的方法是:

function plusminus2(val1, val2){
   return ((Math.abs(val1 - val2) >= 2) ? true : false);
}

if (plusminus2(first, second) || plusminus2(first, third) || plusminus2(second, third)){
  // do something
}

但我通常不建议这样做。虽然它可能会为您节省几秒钟的时间来编写一些 if 语句 (假设不止这个) 但这会让其他任何试图理解您的代码的人都非常头疼甚至是你自己,如果你在 4 年后打开它!

如果您愿意使用函数来确定数字数组之间的最大差值,则可以通过以下几种方法解决该问题。最短的,如果可能是最简洁的,只是关于如何解决问题的一些想法:

const shortGetMaxDifference = numbers => Math.max(...numbers) - Math.min(...numbers);

const getMaxDifference = numbers => {
  const sorted = numbers
    .sort((a, b) => a > b ? -1 : 1)
    
  return sorted[0] - sorted[sorted.length-1]
}

const longWindedGetMaxDifference = numbers => numbers
  .map(i => numbers.map(j => Math.max(i, j) - Math.min(i, j))
  .sort((a, b) => a > b ? -1 : 1))
  .reduce((prev, curr) => [...prev, ...curr], [])
  .sort((a, b) => a > b ? -1 : 1)[0]
  
const numbers = [1, 4, -5, 7, 13]

console.log(shortGetMaxDifference(numbers))
console.log(getMaxDifference(numbers))
console.log(longWindedGetMaxDifference(numbers))

const first = 1;
const second = 3;
const third = 2;

if (getMaxDifference([first, second, third]) >= 2) {
  console.log('The difference is bigger');
}

if ( Math.max(first, second, third) - Math.min(first, second, third) >= 2 )

或效率稍低:

var a = [first, second, third].sort((a, b) => a - b));
if ( a[2] - a[0] >= 2 )