javascript - IF ELSE 运算符

javascript - IF ELSE operators

学习基础知识并进行了此练习:

"Write a function addWithSurcharge that adds two amounts with surcharge. For each amount less than or equal to 10, the surcharge is 1. For each amount greater than 10, the surcharge is 2. The call addWithSurcharge(5, 15) should return 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) {...

工作?我意识到不能做 ||运算符,因为它可能会影响错误的数字。

改为将数字放入数组中,并遍历数组,这样您就不必重复 num1num2:

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

您还可以这样做:

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} 效果非常好!

最基本的改进是可以调用两次的辅助函数:

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

一种方法是使用三元运算符

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

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

如果您使用 ?分配一个值时,它会计算 ? 左侧的内容。 return 的左侧,如果为真,则为右侧。