嘿,我正在使用应用来模拟价格。我有这样的代码。
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个函数中使用它?
答案 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);
}
}
对于函数extra
或max110
,参数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));