使用if语句javascript进行数字操作
我在一个名为inputObj的对象中存储了多个用户输入,然后这些属性都需要在100个属性中进行排名(附件是当前对一个属性进行排名的方法),最多需要对20个属性进行排名,所以目前这是一个我经常重复自己的方法 数学都很好,我得到了想要的结果,但需要一个更整洁的方法来实现这一点,建议 主要问题是,每个属性的数学运算都会发生变化,因此应用于所有属性的通用函数将无法工作 谢谢使用if语句javascript进行数字操作,javascript,object,if-statement,Javascript,Object,If Statement,我在一个名为inputObj的对象中存储了多个用户输入,然后这些属性都需要在100个属性中进行排名(附件是当前对一个属性进行排名的方法),最多需要对20个属性进行排名,所以目前这是一个我经常重复自己的方法 数学都很好,我得到了想要的结果,但需要一个更整洁的方法来实现这一点,建议 主要问题是,每个属性的数学运算都会发生变化,因此应用于所有属性的通用函数将无法工作 谢谢 if (inputObj.dyAGE <=5) { inputObj.dyAGE *= 5.5; }
if (inputObj.dyAGE <=5) {
inputObj.dyAGE *= 5.5;
}
else if (inputObj.dyAGE<=7) {
inputObj.dyAGE -= 5;
inputObj.dyAGE *= 16.5;
inputObj.dyAGE += 33;
}
else if(inputObj.dyAGE<=11) {
inputObj.dyAGE -= 7;
inputObj.dyAGE *= 8.25;
inputObj.dyAGE += 66;
}
else if (inputObj.dyAGE<=16) {
inputObj.dyAGE -= 17;
inputObj.dyAGE = -inputObj.dyAGE;
inputObj.dyAGE *= 6.6;
inputObj.dyAGE += 66;
}
else if(inputObj.dyAGE <= 19) {
inputObj.dyAGE -= 20;
inputObj.dyAGE = -inputObj.dyAGE;
inputObj.dyAGE *= 11;
inputObj.dyAGE += 33
}
else if (inputObj.dyAGE <= 30) {
inputObj.dyAGE-31;
inputObj.dyAGE = -inputObj.dyAGE;
inputObj.dyAGE *= 3;
};
if(inputObj.dyAGE将对象视为数组,并像这样迭代:
for(var i in inputObj) {
if (inputObj[i] <=5) {
inputObj[i] *= 5.5;
}
...
}
for(inputObj中的变量i){
如果(inputObj[i]将对象视为数组,并像这样迭代:
for(var i in inputObj) {
if (inputObj[i] <=5) {
inputObj[i] *= 5.5;
}
...
}
for(inputObj中的变量i){
如果(inputObj[i]您可以使用一个函数:
inputObj.dyAGE = convert_AGE(inputObj.dyAGE)
function convert_AGE(x) {
if (x <= 5)
return x * 5.5;
if (x <= 7)
return (x - 5) * 16.5 + 33;
etc
变成这样
(17 - x) * 6.6 + 66
甚至
178.2 - 6.6 * x
当然,您可以对每个属性使用不同的函数,如
inputObj.dyAGE = convert_AGE(inputObj.dyAGE)
inputObj.dyXYZ = convert_XYZ(inputObj.dyXYZ)
或者通过创建函数散列来自动执行此操作:
convertors = {
'dyAGE': function(x) { code to convert age },
'dyXYZ': function(x) { code to convert xyz },
etc
}
然后一次转换所有属性
for (var prop in input)
if (prop in convertors)
input.prop = convertors[prop](input.prop);
您可以使用以下函数:
inputObj.dyAGE = convert_AGE(inputObj.dyAGE)
function convert_AGE(x) {
if (x <= 5)
return x * 5.5;
if (x <= 7)
return (x - 5) * 16.5 + 33;
etc
变成这样
(17 - x) * 6.6 + 66
甚至
178.2 - 6.6 * x
当然,您可以对每个属性使用不同的函数,如
inputObj.dyAGE = convert_AGE(inputObj.dyAGE)
inputObj.dyXYZ = convert_XYZ(inputObj.dyXYZ)
或者通过创建函数散列来自动执行此操作:
convertors = {
'dyAGE': function(x) { code to convert age },
'dyXYZ': function(x) { code to convert xyz },
etc
}
然后一次转换所有属性
for (var prop in input)
if (prop in convertors)
input.prop = convertors[prop](input.prop);
您可以将业务逻辑建模到类中
诸如此类:
- 具有类型(加、减、除…)和值的类操作
- 包含操作列表和值的类约束
然后,创建一个约束列表(使用良好的构造函数,您可以在一行代码中实例化约束)。循环到此列表上。对于每个项目,获取约束值,执行“如果”,然后“如果需要”应用所有操作(在操作类型上切换块)
建模稍微复杂一点,但是如果需要添加很多约束,那么它更易于维护和添加约束
这里是最后一段代码:警告:我还没有测试代码,可能有一些语法错误,但主要原理在这里
var myConstraint = new Array();
myConstraint.push(5, {new Operation(Operation.TIME, 5.5)});
myConstraint.push(7, {new Operation(Operation.MINUS, 5), new Operation(Operation.TIME, 16.5), new Operation(Operation.PLUS, 33)});
...
for (var i = 0; i < myConstraint.length; i++) {
var c = myConstraint[i];
if (inputObj.dyAGE <= c.value) {
var op = c.operations;
for (var i = 0; i < op.length; i++) {
switch (op[i].type) {
case PLUS : inputObj.dyAge += op[i].value; break;
case ...
}
}
break;
}
}
var myConstraint=new Array();
myConstraint.push(5,{新操作(Operation.TIME,5.5)});
myConstraint.push(7,{新操作(Operation.减号,5),新操作(Operation.TIME,16.5),新操作(Operation.PLUS,33)});
...
对于(变量i=0;i if(inputObj.dyAGE您可以将业务逻辑建模到类中
诸如此类:
- 具有类型(加、减、除…)和值的类操作
- 包含操作列表和值的类约束
然后,创建一个约束列表(使用良好的构造函数,您可以在一行代码中实例化约束)。循环到此列表上。对于每个项目,获取约束值,执行“如果”,然后“如果需要”应用所有操作(在操作类型上切换块)
建模稍微复杂一点,但是如果需要添加很多约束,那么它更易于维护和添加约束
这里是最后一段代码:警告:我还没有测试代码,可能有一些语法错误,但主要原理在这里
var myConstraint = new Array();
myConstraint.push(5, {new Operation(Operation.TIME, 5.5)});
myConstraint.push(7, {new Operation(Operation.MINUS, 5), new Operation(Operation.TIME, 16.5), new Operation(Operation.PLUS, 33)});
...
for (var i = 0; i < myConstraint.length; i++) {
var c = myConstraint[i];
if (inputObj.dyAGE <= c.value) {
var op = c.operations;
for (var i = 0; i < op.length; i++) {
switch (op[i].type) {
case PLUS : inputObj.dyAge += op[i].value; break;
case ...
}
}
break;
}
}
var myConstraint=new Array();
myConstraint.push(5,{新操作(Operation.TIME,5.5)});
myConstraint.push(7,{新操作(Operation.减号,5),新操作(Operation.TIME,16.5),新操作(Operation.PLUS,33)});
...
对于(变量i=0;i
var ages={
min: 0,
max: 11,
'0': function (x){return 5.5;},
'5': function (x){return x*5.5;},
'7': function (x){return (x-5)*16.5+33;},
'11': function (x){return (x-7)*8.25+66;}
}
function getRank(oper,prop){
if(prop<oper.min || prop>oper.max) return false;
var idx=prop,rank;
while(!oper.hasOwnProperty(idx)){
idx++;
if(idx>oper.max) return false;
}
rank=oper[idx](prop);
return rank;
}
此代码可用于inputObj.dyAGE
中的任何非负整数。如果需要使用浮点值,则在传递到getRank
-函数时必须将其转换为整数。如何:
var ages={
min: 0,
max: 11,
'0': function (x){return 5.5;},
'5': function (x){return x*5.5;},
'7': function (x){return (x-5)*16.5+33;},
'11': function (x){return (x-7)*8.25+66;}
}
function getRank(oper,prop){
if(prop<oper.min || prop>oper.max) return false;
var idx=prop,rank;
while(!oper.hasOwnProperty(idx)){
idx++;
if(idx>oper.max) return false;
}
rank=oper[idx](prop);
return rank;
}
此代码可用于inputObj.dyAGE
中的任何非负整数。如果需要使用浮点值,则在传递到getRank
-函数时必须将其转换为整数。最后一个If
正文的第一行是否可能出错?哦,是的,我没有看到,答案是great!但我忘了解释每个属性的数学运算会发生变化,因此无法生成函数并将其应用于不同的属性。如果
if
body的最后一行,你可能会犯错误吗?哦,是的,我没有看到,答案很好!但我忘了解释数学运算会发生变化为每个属性设置ge,因此无法创建函数并将其应用于不同的属性