简化的javascript使用几乎相同的代码实现某些函数

简化的javascript使用几乎相同的代码实现某些函数,javascript,function,Javascript,Function,嗨,我正在开发一个模拟价格的应用程序。我有这样的代码 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

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

  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!';
     }
 }
我仍然有一些类似的函数,它几乎与我试图简化的代码相同,是否可以只在一个函数中实现它?

试试:

  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,如果不了解更多有关功能的详细信息,就无法获得更好的解决方案。

这将是我的实现。我不同意你如何处理整数,但这是你的编码风格。我传入一个具有我想要的所有值的选择对象。您不需要逻辑,只需要值。我希望没有人会因为我用了蒙基补丁而生气。我假设变量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);
}

对于函数max110或max115,参数extra可以是0或5。基本上,您有两个函数,它们以相同的方式工作,并返回相同的值和不同的值

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

所以你们需要更好地组织变量的类型,若用它作为数字,它应该是数字,也可以用来比较,那个么它应该是条件两边的数字

使用a,它不会改变某个未被赋予函数的状态

在函数中检查不需要的值,并提前退出,在下边框处进行第一次检查,在您的情况下,它是零,并且低于,返回-1,因为它不是数组的索引,通常用于表示找不到索引,如

然后使用索引值提前获取检查结束退出的上边框,无需继续执行else if结构

最后返回-1表示未找到索引

一起:

函数getValuex,maxArray{ var指数=getIndexx; maxArray中的if索引{ 返回'Rp.+maxArray[index]*x*1000; } 返回'error!'; } 函数getIndexx{ 如果!x | | x<0{ 返回-1; }
如果x是一个字符串或数字?如果是一个数字,它是一个整数吗?预期的范围是什么?它是一个字符串,我需要将它解析为整数吗?我总是使用数字,不清楚为什么要解析一个数字。你想用它实现什么?对不起,我只是从两三个月前开始使用javascript,我不明白它是什么LOL:@naovalluthfi哪一部分?几乎所有的部分,我都不理解这个代码“String.prototype.isBetween”哦,这是我走了一点捷径并修补了String对象。我基本上为String创建了自己的方法。向对象原型添加一些东西就是如何用ES5语法向对象添加自己的方法。@naovalluthfi哈哈,protot在ES6中,JavaScript方法创建的ype风格被类语法掩盖了。了解基本原理总是很好的,但是你可以在很长一段时间内不做我在代码中向你展示的事情。我的代码可以工作,对吗?我想我理解它是如何工作的,但我不理解为什么-1?这只是一个定义尼顿,因为这个值不是数组的索引。你可以看看这里:哦,我知道,我知道对不起,我刚刚意识到当我再次阅读它时,console.log'Rp.+max110[index]*x*1000;max110[index]能自动更改吗?你知道我的意思吗?你可以将完整的逻辑移到另一个函数中。
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);
  }
}