是否可以编写单向三元运算符?

Is it possible to write one way ternary operator?

我想用三元运算符替换 if 语句。我的代码中的情况是我想使用一个 if 语句而不是 if-else。但似乎三元运算符采用强制性的 else 语句。

我预期的产生错误的代码是:

for(let i = 0; i<fibArr.length; i++) {
    !fibArr[i] % 2 === 0 ? result += fibArr[i]; //The problem area
}

相反,我必须编写运行没有任何问题的代码:

for(let i = 0; i<fibArr.length; i++) {
    if(fibArr[i] % 2 !== 0) {
        result += fibArr[i]
    }
}

完整代码:

function sumFibs(num) {
    let a = 0, b = 1, fib = 0; 
    let i = 0; 
    let fibArr = []
    let result = 0; 

    while(fib <= num){
        fibArr.push(fib)
        a = b; 
        b = fib; 
        fib = a+b; 
    }

    for(let i = 0; i<fibArr.length; i++) {
        if(fibArr[i] % 2 !== 0) {
            result += fibArr[i]
        }
    }
    console.log(result)
    return result; 
}

我想你可以这样做:

function sumFibs(num) {
    let a = 0, b = 1, fib = 0; 
    let i = 0; 
    let fibArr = []
    let result = 0; 

    while(fib <= num){
        fibArr.push(fib)
        a = b; 
        b = fib; 
        fib = a+b; 
    }

    for(let i = 0; i<fibArr.length; i++) {
        (fibArr[i] % 2 !== 0) ? (result += fibArr[i]) : null;
    }
    console.log(result)
    return result; 
}

但这似乎并没有增加多少价值,只会造成混乱。请注意,三元运算符通常用作赋值,而不是控制流语句。

更具体地说,这是更改的部分。请注意,没有办法像 {condition} ? value : 这样的语法明智。您总是必须 return 冒号后的表达式。

(fibArr[i] % 2 !== 0) ? (result += fibArr[i]) : null;