Можно ли написать односторонний тернарный оператор?

Я хотел бы заменить оператор 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; 
}


person Mehmet Eyüpoğlu    schedule 19.04.2020    source источник
comment
Вы можете просто добавить 0 для случая else result += (fibArr[i] % 2 !== 0) ? fibArr[i] : 0;   -  person domsson    schedule 20.04.2020
comment
Почему вы хотите заменить это в первую очередь? Это, кажется, ничего не дает вам   -  person UnholySheep    schedule 20.04.2020


Ответы (1)


Я думаю, вы могли бы сделать что-то вроде:

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 :. Вы всегда должны возвращать выражение после двоеточия.

(fibArr[i] % 2 !== 0) ? (result += fibArr[i]) : null;
person rnli    schedule 19.04.2020
comment
Итак, предпочтительнее просто использовать оператор if? - person Mehmet Eyüpoğlu; 20.04.2020
comment
Да, это имеет больше смысла в том, чего вы пытаетесь достичь. В противном случае неясно, забыли ли вы задание или намеренно оставили его неназначенным. - person rnli; 20.04.2020
comment
Цель состоит в том, чтобы включить больше функций ES6 по практическим соображениям, но, похоже, не стоит использовать их все время. - person Mehmet Eyüpoğlu; 20.04.2020