javascript - если операторы ELSE - PullRequest
1 голос
/ 10 февраля 2020

Изучая основы и выполнив это упражнение:

"Напишите функцию addWithSurcharge, которая добавляет две суммы с доплатой. За каждую сумму, меньшую или равную 10, надбавка равна 1. Для каждой суммы больше 10 , доплата равна 2. Вызов addWithSurcharge (5, 15) должен вернуть 23. "

Я поставил:

function addWithSurcharge(num1, num2) {
if (num1 <= 10) {
num1 += 1;
} else {
num1 += 2;
}
if (num2 <= 10) {
num2 += 1;
} else {
num2 += 2;
}
return num1 + num2;
}

Что работает, но я хочу изучить лучший синтаксис. Может ли что-то вроде

if (num1, num2 <= 10) {...

работать? Я понимаю, что не могу сделать || оператор, потому что это может повлиять на неправильный номер.

Ответы [ 4 ]

2 голосов
/ 10 февраля 2020

Вы также можете сделать:

function addWithSurcharge(num1, num2) {
return num1 + num2 + num1<=10?1:2 + num2<=10?1:2;
}

num1<=10?1:2 в основном означает if(num1<=10){1} else{2}, который работает очень хорошо!

2 голосов
/ 10 февраля 2020

Самое основное улучшение c - это вспомогательная функция, которую вы можете вызвать дважды:

function withSurcharge(num) {
  if (num <= 10) return num + 1;
  else return num + 2;
}
function addWithSurcharge(num1, num2) {
  return withSurcharge(num1) + withSurcharge(num2);
}

Вы можете дополнительно сократить оператор if / else, чтобы использовать условное выражение, но не много чего выиграет:

return num + (num <= 10 ? 1 : 2);
2 голосов
/ 10 февраля 2020

Вместо этого поместите числа в массив и итерируйте по массиву, чтобы вам не приходилось повторять num1 и num2:

function addWithSurcharge(...nums) {
  return nums.reduce((a, num) => {
    if (num <= 10) {
      num += 1;
    } else {
      num += 2;
    }
    return a + num;
  }, 0);
}
console.log(addWithSurcharge(5, 15));

Без .reduce вышеуказанное эквивалентно:

function addWithSurcharge(...nums) {
  nums.forEach((num, i) => {
    if (num <= 10) {
      nums[i] += 1;
    } else {
      nums[i] += 2;
    }
  });
  return nums[0] + nums[1];
}
console.log(addWithSurcharge(5, 15));

Вы можете использовать условный оператор, чтобы сделать деталь if / else более краткой, не беспокоясь и о переназначении:

const addWithSurcharge = (...nums) => (
  nums.reduce(
    (a, num) => a + num + (num <= 10 ? 1 : 2),
    0
  )
);
console.log(addWithSurcharge(5, 15));
1 голос
/ 10 февраля 2020

Один из способов сделать это - использовать троичный оператор

function addWithSurcharge(num1,num2)
{        
    num1 += num1 <= 10 ? 1 : 2;
    num2 += num2 <= 10 ? 1 : 2;
    return num1 + num2;
}

console.log(addWithSurcharge(10,5));

Если вы используете? при присвоении значения оно будет оценивать все, что находится с левой стороны от? и либо вернуть левую часть: если это правда, или правую сторону, если это ложь.

...