简体   繁体   English

如何重构 function vanilla js

[英]How refactor a function vanilla js

I am trying to refactor a function but can't figure out what could be the best approach for it我正在尝试重构 function 但不知道什么是最好的方法

let smallNumber = 50;
let mediumNumber = 40;
let groupNumber = 35;

function price() {
  if (numberSelected <= 3) {
    document.getElementById("total").innerHTML = "£"+(smallNumber * numberSelected).toFixed(2);
  } else if (numberSelected <= 6) {
    document.getElementById("total").innerHTML = "£"+(mediumNumber * numberSelected).toFixed(2);
  } else if (numberSelected > 6) {
    document.getElementById("total").innerHTML = "£"+(groupNumber * numberSelected).toFixed(2);
  }
  total.style.display = "block";
  button.style.display = "block";
}

Thanks谢谢

You can start by dividing your code into smaller functions您可以从将代码分成更小的函数开始

 const convertToPounds = (num) => "£" + num.toFixed(2); const getNumToAdd = (input) => input <= 3? 50: (input > 6? 35: 40); const getFinalPrice = (input) => convertToPounds(getNumToAdd(input) + input); console.log(`Input: 2 Output: ${getFinalPrice(2)}`); console.log(`Input: 10 Output: ${getFinalPrice(10)}`); console.log(`Input: 5 Output: ${getFinalPrice(5)}`);

You can use the getFinalPrice function in your start function.您可以在start function 中使用getFinalPrice function。

If you want to use ternary operator you can use this code.如果要使用三元运算符,可以使用此代码。 I add extra variable to reduce duplication of code.我添加了额外的变量以减少代码重复。

function price() {
  let total = document.getElementById("total");
  total.style.display = "block";
  button.style.display = "block";
  let text;

  text = numberSelected <= 3 ? smallNumber :
         numberSelected <= 6 ? mediumNumber : groupNumber;

  total.innerHTML = "£" + (text * numberSelected).toFixed(2);
}

Since refactoring involves changing the implementation of your code, it's a good idea to have tests in place before you start refactoring.由于重构涉及更改代码的实现,因此在开始重构之前进行测试是个好主意。 The tests will allow you to know if the refactor changed the behavior of the code you're refactoring.测试将让您知道重构是否改变了您正在重构的代码的行为。 That said, you could do the following:也就是说,您可以执行以下操作:

 function price() { let selectedNumber; if (numberSelected <= 3) { selectedNumber = smallNumber; } else if (numberSelected <= 6) { selectedNumber = mediumNumber; } else if (numberSelected > 6) { selectedNumber = groupNumber; } document.getElementById("total").innerHTML = "£" + (selectedNumber * numberSelected).toFixed(2); total.style.display = "block"; button.style.display = "block"; }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM