我有一段代码:
if (foo > bar) {
baz = foo - bar
} else {
baz = foo + bar
}我有一个问题,如果我能以某种方式将这段代码缩短为一行,比如
PSEUDOCODE:
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
}谢谢!
发布于 2019-03-08 19:28:00
您可以将支票转换为数字或以-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);发布于 2019-03-08 19:26:55
baz = foo > bar ? foo - bar : foo + bar;编辑:
我明白你的具体问题。我很肯定我会因为这么说而被私刑处死,但您可以使用eval()将其计算为字符串。如果以下任何内容都是通过未定用户数据派生的,则不推荐。
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;发布于 2019-03-08 19:58:19
你差点就到了。foo - bar可以写成foo + -bar。因此,伪代码可以编写为:
baz = foo + (foo > bar ? +1 : -1) * barhttps://stackoverflow.com/questions/55069719
复制相似问题