NodeJS 重构JavaScript(开关与函数)

enyaitl3  于 2022-11-04  发布在  Node.js
关注(0)|答案(2)|浏览(219)

我是一个初学者,我正在学习JS。我想知道如何在下面的代码中写一个开关内的函数(如果可能的话),把代码变小。
我试着把每个操作的函数放在开关里面,但是从来没有成功过。请帮助我改进我的代码。谢谢!

//Calculator of Basic Operations

function addition(a, b) {
  return (a + b);
}

function subtraction(a, b) {
  return (a - b);
}

function multiplication(a, b) {
  return (a * b);
}

function division(a, b) {
  return (a / b);
}

console.log('Choose the number for the operation you want to use.');
console.log('1 - Addition');
console.log('2 - Subtraction');
console.log('3 - Multiplication');
console.log('4 - Division');

let calcAB = prompt('Operation: ');

switch (calcAB) {

  case '1':
    a = Number(prompt('Enter the value for A: '));
    b = Number(prompt('Enter the value for B: '));
    console.log(`The addition result is "${addition(a, b)}"`);
    break;

  case '2':
    a = Number(prompt('Enter the value for A: '));
    b = Number(prompt('Enter the value for B: '));
    console.log(`The subtraction result is "${subtraction(a, b)}"`);
    break;

  case '3':
    a = Number(prompt('Enter the value for A: '));
    b = Number(prompt('Enter the value for B: '));
    console.log(`The multiplication result is "${multiplication(a, b)}"`);
    break;

  case '4':
    a = Number(prompt('Enter the value for A (dividend): '));
    b = Number(prompt('Enter the value for B (divisor): '));
    console.log(`The division result is "${division(a, b)}"`);
    break;
}
xpcnnkqh

xpcnnkqh1#

两种情况之间唯一的变化是

  • 调用的函数
  • 调用的操作的名称
  • (dividend)(divisor)/

我会用一个数组来代替函数和运算符的名字--例如,[0]将引用(a, b) => a + b,这样你只需要从用户选择的数字中减去1就可以得到函数。要得到ab,只有当case是4时才对(dividend)(divisor)进行插值--但这一切都可以一次完成。

const fns = [
  [(a, b) => a + b, 'addition'],
  [(a, b) => a - b, 'subtraction'],
  [(a, b) => a * b, 'multiplication'],
  [(a, b) => a / b, 'division']
];
const op = prompt('Operation: ');
const item = fns[op - 1];
if (!item) {
  throw new Error('Invalid');
}
const a = Number(prompt(`Enter the value for A${op === '4' ? ' (dividend)' : ''}: `));
const b = Number(prompt(`Enter the value for b${op === '4' ? ' (divisor)' : ''}: `));
console.log(`The ${item[1]} result is ${item[0](a, b)}`);
iqjalb3h

iqjalb3h2#

不要为了使代码更小而使代码复杂,这会使代码更混乱,并忽略了要点,即让您理解语法和您正在做的事情

相关问题