有没有更优雅的方式来写这些条件?
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 )
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 )