繁体   English   中英

简化的javascript具有几乎相同代码的某些功能

[英]Simplified javascript some function with almost the same code

嘿,我正在开发一个应用程序来模拟价格。 我有这样的代码。

  function max110(x) {
     if (x >= '1' && x <= '50') {
         var sum = 120 * x;
         hasil.value = 'Rp.' + parseFloat(sum * 1000);
     } else if (x >= '51' && x <= '100') {
         var sum = 115 * x;
         hasil.value = 'Rp.' + parseFloat(sum * 1000);
     } else if (x >= '101' && x <= '200') {
         var sum = 110 * x;
         hasil.value = 'Rp.' + parseFloat(sum * 1000);
     } else {
         hasil.value = 'error!';
     }
 }

 function max115(x) {
     if (x >= '1' && x <= '50') {
         var sum = 125 * x;
         hasil.value = 'Rp.' + parseFloat(sum * 1000);
     } else if (x >= '51' && x <= '100') {
         var sum = 120 * x;
         hasil.value = 'Rp.' + parseFloat(sum * 1000);
     } else if (x >= '101' && x <= '200') {
         var sum = 115 * x;
         hasil.value = 'Rp.' + parseFloat(sum * 1000);
     } else {
         hasil.value = 'error!';
     }
 }

而且我还有一些类似的功能,它几乎与我试图简化的代码相同,是否可以仅在1个功能中使用它?

尝试:

  function maxval(x,maxval) {
    if(x >= '1' && x <= '50'){
      var sum = (maxval+10)* x;
      hasil.value = 'Rp.'+parseFloat(sum*1000);
    }
     else if (x >= '51' && x <= '100'){
       var sum = (maxval+5)* x;
       hasil.value = 'Rp.'+parseFloat(sum*1000);
     }
     else if(x >= '101' && x <= '200'){
       var sum = (maxval)* x;
       hasil.value = 'Rp.'+parseFloat(sum*1000);
     }
     else{
       hasil.value = 'error!';
     }
  }

顺便说一句,我假设maxval会增加5,Cant为您提供了更好的解决方案,而没有更多有关功能的细节。

这就是我的实现。 我不同意您如何处理整数,但这是您的编码风格。 我传入一个选择的对象,该对象具有我想要的所有值。 您不需要逻辑,仅需要值。 我希望没有人生气的时候,我猴补丁String 我假设变量x是一个字符串。

String.prototype.isBetween = function(lower, upper){
  int = parseInt(this)
  return int >= parseInt(lower) && int <= parseInt(upper)
}

max110 = {0: 120, 1: 115, 2: 110}
max115 = {0: 125, 1: 120, 2: 115}
function max(x, values) {
  let sum
  hasil.value = ''
  if (x.isBetween('1', '50')) {
    sum = values['0'] * x
  } else if (x.isBetween('51', '100')) {
    sum = values['1'] * x
  } else if (x.isBetween('101', '200')) {
    sum = values['2'] * x
  } else {
    hasil.value = 'error'
  }
  hasil.value = hasil.value ? 'error' : 'Rp.'+parseFloat(sum*1000);
}
function max(x, extra) {
  var sum_number = extra;
  if(x >= '1' && x <= '50'){
   sum_number += 120;
  }
  else if (x >= '51' && x <= '100'){
   sum_number += 115;
  }
  else if(x >= '101' && x <= '200'){
   sum_number += 110;
  }

  if(x < 1 && x > 200){
    hasil.value = 'error!';
  } else {
    hasil.value = 'Rp.'+parseFloat((sum_number) * x *1000);
  }
}

参数max110max115参数extra可以为0或5

基本上,您有两个函数以相同的方式工作,并以不同的值返回相同的函数。

  • 您将不同的值存储在数组中,可以使用单个函数获取索引,然后使用该索引从数组中取出所需的值。

  • 因此,您需要更好地组织变量的类型,如果将其用作数字,则它应该是数字,并且也要进行比较,然后在条件的两边都应该是数字。

  • 使用纯函数 ,该函数不会更改某些东西的状态,而该函数未赋予该函数。

  • 在函数中使用不需要的值的检查,并在下边界进行第一次检查以尽早退出,如果是零以下,则返回-1 ,因为它不是数组的索引(通常使用表示没有找到索引,例如Array#indexOf )。

  • 然后使用索引值尽早获取检查结束出口的上限,而无需继续else if结构。

  • 最后返回-1 ,表示找不到索引。

一起:

 function getValue(x, maxArray) { var index = getIndex(x); if (index in maxArray) { return 'Rp.' + maxArray[index] * x * 1000; } return 'error!'; } function getIndex(x) { if (!x || x < 0) { return -1; } if (x <= 50) { return 0; } if (x <= 100) { return 1; } if (x <= 200) { return 2; } return -1; } var max110 = [120, 115, 110], max115 = [125, 120, 115]; console.log(getValue(-1, max110)); console.log(getValue(10, max110)); console.log(getValue(10, max115)); 

暂无
暂无

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

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