首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运算符的条件运算符

运算符的条件运算符
EN

Stack Overflow用户
提问于 2019-03-08 19:24:35
回答 6查看 115关注 0票数 5

我有一段代码:

代码语言:javascript
复制
if (foo > bar) {
    baz = foo - bar
} else {
    baz = foo + bar
}

我有一个问题,如果我能以某种方式将这段代码缩短为一行,比如

PSEUDOCODE:

代码语言:javascript
复制
baz = foo (foo > bar ? + : -) bar

我想缩短真正的代码

代码语言:javascript
复制
if (gradientStartH > gradientEndH) {
    h = gradientStartH - Math.abs(gradientStartH - gradientEndH) / arr.length * i
} else {
    h = gradientStartH + Math.abs(gradientStartH - gradientEndH) / arr.length * i
}

谢谢!

EN

回答 6

Stack Overflow用户

发布于 2019-03-08 19:28:00

您可以将支票转换为数字或以-1作为因子。

代码语言:javascript
复制
baz = foo + (foo > bar || -1) * bar

最干净的方法是使用带有操作数的对象和获取操作数的检查。

代码语言:javascript
复制
op = {
    true: function (a, b) { return a + b; }, // add
    false: function (a, b) { return a - b; } // sub
}
baz = op[foo > bar](foo, bar);
票数 5
EN

Stack Overflow用户

发布于 2019-03-08 19:26:55

代码语言:javascript
复制
baz = foo > bar ? foo - bar : foo + bar;

运算符

编辑:

我明白你的具体问题。我很肯定我会因为这么说而被私刑处死,但您可以使用eval()将其计算为字符串。如果以下任何内容都是通过未定用户数据派生的,则不推荐。

代码语言:javascript
复制
h = eval(`${gradientStartH} ${gradientStartH > gradientEndH ? '-' : '+'} ${Math.abs(gradientStartH - gradientEndH) / arr.length * i}`);

否则一条像样的两条船。更喜欢。

代码语言:javascript
复制
const absVal = Math.abs(gradientStartH - gradientEndH) / arr.length * i;
h = gradientStartH > gradientEndH ? gradientStartH - absVal : gradientStartH + absVal;
票数 4
EN

Stack Overflow用户

发布于 2019-03-08 19:58:19

你差点就到了。foo - bar可以写成foo + -bar。因此,伪代码可以编写为:

代码语言:javascript
复制
baz = foo + (foo > bar ? +1 : -1) * bar
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55069719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档