我有一段代码:
if (foo > bar) {
baz = foo - bar
} else {
baz = foo + bar
}
我有一个问题,是否可以将这段代码缩短为一行,例如
伪代码:
baz = foo (foo > bar ? + : -) bar
我想简化的真实代码
if (gradientStartH > gradientEndH) {
h = gradientStartH - Math.abs(gradientStartH - gradientEndH) / arr.length * i
} else {
h = gradientStartH + Math.abs(gradientStartH - gradientEndH) / arr.length * i
}
谢谢!
答案 0 :(得分:5)
您可以将支票转换为数字,或将-1
作为要素。
baz = foo + (foo > bar || -1) * bar
最干净的方法是将一个对象与操作数一起使用,并检查获取操作数。
op = {
true: function (a, b) { return a + b; }, // add
false: function (a, b) { return a - b; } // sub
}
baz = op[foo > bar](foo, bar);
答案 1 :(得分:4)
baz = foo > bar ? foo - bar : foo + bar;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
编辑:
我了解您的具体问题。我敢肯定我会因为这样说而被私刑,但是您可以使用eval()
将其评估为字符串。如果以下任何内容来自unsantized用户数据,则不建议使用。
h = eval(`${gradientStartH} ${gradientStartH > gradientEndH ? '-' : '+'} ${Math.abs(gradientStartH - gradientEndH) / arr.length * i}`);
否则,不错的两个衬里。首选。
const absVal = Math.abs(gradientStartH - gradientEndH) / arr.length * i;
h = gradientStartH > gradientEndH ? gradientStartH - absVal : gradientStartH + absVal;
答案 2 :(得分:4)
您快到了。 foo - bar
可以写为foo + -bar
。因此伪代码可以写为:
baz = foo + (foo > bar ? +1 : -1) * bar
答案 3 :(得分:4)
您可以仅将if-else
和Math.abs
删除:
h = gradientStartH - (gradientStartH - gradientEndH) / arr.length * i
以下是将其与您的代码进行比较的摘要:
// Your code
function getDiffExisting(gradientStartH, gradientEndH, arr) {
let h = 0;
if (gradientStartH > gradientEndH) {
h = gradientStartH - Math.abs(gradientStartH - gradientEndH) / arr.length
} else {
h = gradientStartH + Math.abs(gradientStartH - gradientEndH) / arr.length
}
return h;
}
console.log(getDiffExisting(200, 100, [1,2]))
console.log(getDiffExisting(50, 100, [1,2]))
function getDiffNew(gradientStartH, gradientEndH, arr) {
let h = gradientStartH - (gradientStartH - gradientEndH) / arr.length
return h;
}
console.log(getDiffNew(200, 100, [1,2]))
console.log(getDiffNew(50, 100, [1,2]))
(出于测试目的,我删除了i
)
答案 4 :(得分:2)
类似这样的
baz = foo > bar ? foo - bar : foo + bar
答案 5 :(得分:1)
您可以使用三元运算符,就像您尝试原始答案一样。三元运算符的语法应为condition ? true : false;
baz = foo > bar ? foo-bar : foo+bar;
您提到它“可能比这复杂得多”,这对于解决方案而言并不够清晰。根据复杂程度,三元运算符可能不工作。您可以了解有关三元运算符here的更多信息。