Можно ли написать односторонний троичный оператор? - PullRequest
0 голосов
/ 20 апреля 2020

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

1 Ответ

2 голосов
/ 20 апреля 2020

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

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; 
}

Но это, кажется, не добавляет особой ценности, только путаница. Обратите внимание, что троичный оператор часто используется в качестве присваивания, а не оператора потока управления.

Чтобы быть более точным c, эта часть была изменена. Обратите внимание, что нет никакого способа иметь что-то вроде {condition} ? value : с синтаксисом. Вы всегда должны возвращать выражение после двоеточия.

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