简化的javascript一些功能与几乎相同的代码

时间:2017-10-20 04:17:31

标签: 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 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个函数中使用它?

4 个答案:

答案 0 :(得分: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可以为您提供更好的解决方案。

答案 1 :(得分:0)

这将是我的实施。我不同意你如何处理你的整数,但这是你的编码风格。我传递了一个具有我想要的所有值的选择对象。您不需要逻辑,只需要值。我希望没有人生我的monkeypatch 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);
}

答案 2 :(得分:0)

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);
  }
}
对于函数extramax110

参数max115可以是0或5

答案 3 :(得分:0)

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

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

  • 所以你需要一个更好的变量类型组织,如果用作数字,它应该是数字,也可以用于比较,那么它应该是条件两边的数字。

  • 使用pure function,它不会改变某事物的状态,但不会在函数中给出。

  • 使用函数检查不需要的值,并在下边框进行第一次检查时提前退出,在您的情况下,它是零和以下,返回-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));