我试图在网络应用程序中应用医疗分数。搜索功能并没有给我带来满意的结果 分数的一部分不是数学上的,而是仅仅逻辑确定。 它需要三个变量来检查和评分这些值。
评分的作用如下:
Score Grades
0 <-- All 0
1 <-- At least one 1, but no >1
2 <-- 2 in only one region (respectively the variable)
3 <-- 2 in more than one region (respectively the variable)
4 <-- 3 in one or more region (respectively the variable)
5 <-- 4 in only one region (respectively the variable)
6 <-- 4 in more than one region (respectively the variable)
去年我开发了一个功能齐全的Python脚本,但我想通过javaScript将这个分数实现到Web应用程序中。 我想出了一个计数功能 - 计算某个数字出现的次数。
arr = [];
var a = 2;
var b = 4;
var c = 0;
arr.push(a, b, c);
function countThis(numberToCount) {
count = 0;
for (var i in arr) {
if (arr[i] == numberToCount) {
count++;
}
}
}
这些线似乎有效。但是现在出现了让我烦恼的部分 我设置了一系列条件 - 所有条件都链接并与上面的函数结合 - 来计算分数。
function scoreArr() {
score = 0;
if (a === 0 && b === 0 && c === 0) {
score = 0;
} else if (a <= 1 && b <= 1 && c <= 1 && countThis(1) >= 1) {
score = 1;
} else if (a <= 4 || b <= 4 || c <= 4 && countThis(4) >= 2) {
score = 6;
} else if (a <= 4 || b <= 4 || c <= 4 && countThis(4) == 1) {
score = 5;
} else if (a <= 3 || b <= 3 || c <= 3 && countThis(3) >= 1) {
score = 4;
} else if (a <= 2 || b <= 2 || c <= 2 && countThis(2) > 1) {
score = 3;
} else if (a <= 2 || b <= 2 || c <= 2 && countThis(2) == 1) {
score = 2;
}
return score;
}
a = 0, b = 0, c = 0
得出0
的正确分数。
但是对于其他所有可能的组合(数字0到4),我得到完全相同的结果:6
。这显然是错误。
我试图改变运算符,添加括号,但是没有任何东西能使它工作。 我认为问题在我的条件下是隐藏的(?),但我不知道如何解决它。
这是JSFIDDLE。
我必须承认,我对javaScript编码很陌生。所以如果有人能向我解释我做错了什么,我将非常感激。
非常感谢你的时间。
答案 0 :(得分:1)
我相信你的一个问题是你的函数countThis(numberToCount)
没有return语句,所以返回undefined
。
只需添加return count;
即可解决问题。
function countThis(numberToCount) {
var count = 0;
for (var i in arr) {
if (arr[i] == numberToCount) {
count++;
}
}
return count;
}
如果你做了if阻止反过来,从6-0检查,每个if语句需要一次比较,它也会使你的代码更清晰,更不容易出错。这就是你以前出错的地方,只需要一点点的重新安排和规划就可以提供帮助:
function scoreArr() {
var score = 0;
if (countThis(4)>1) {
score = 6;
} else if (countThis(4)==1) {
score = 5;
} else if (countThis(3)>=1) {
score = 4;
} else if (countThis(2)>1) {
score = 3;
} else if (countThis(2)==1) {
score = 2;
} else if (countThis(1)>=1) {
score = 1;
} else {
score = 0;
}
return score;
}
我制作了一个jsFiddle,你可以看到结果:https://jsfiddle.net/Daniel300/evLqzuvs/5/
修改强>
再看一下你的代码,我意识到你可能还想看看其他一些问题:
如果您希望您的函数正常工作,您应该在函数内声明您正在使用的所有变量,并返回您需要的函数。
而不是:
addOne(1);
function addOne(num) {
result=num+1;
}
alert(result);
尝试:
function addOne(num) {
var result = num + 1; //Local variable, keeps it inside the function only.
return result; //Returns only what you need
}
alert(addOne(1)); //MUCH simpler :)
//alert(result); would give undefined
答案 1 :(得分:0)
获得分数6的可能原因是:
您已添加条件
说第1组
} else if (a <= 4 || b <= 4 || c <= 4 && countThis(4) >= 2) {
score = 6;
} else if (a <= 4 || b <= 4 || c <= 4 && countThis(4) == 1) {
score = 5;
之前此
说第2组
} else if (a <= 3 || b <= 3 || c <= 3 && countThis(3) >= 1) {
score = 4;
} else if (a <= 2 || b <= 2 || c <= 2 && countThis(2) > 1) {
score = 3;
} else if (a <= 2 || b <= 2 || c <= 2 && countThis(2) == 1) {
score = 2;
无论a
的价值有多小,第1组的条件都将首先执行,第2组将永远不会获得执行事件a = 1 or 2 or 3
因为这些值满足条件a <= 4
要解决此问题,您需要将条件移至
function scoreArr() {
score = 0;
if (a === 0 && b === 0 && c === 0) {
score = 0;
} else if (a <= 1 && b <= 1 && c <= 1 && countThis(1) >= 1) {
score = 1;
} else if (a <= 2 || b <= 2 || c <= 2 && countThis(2) == 1) {
score = 2;
} else if (a <= 2 || b <= 2 || c <= 2 && countThis(2) > 1) {
score = 3;
} else if (a <= 3 || b <= 3 || c <= 3 && countThis(3) >= 1) {
score = 4;
} else if (a <= 4 || b <= 4 || c <= 4 && countThis(4) == 1) {
score = 5;
} else if (a <= 4 || b <= 4 || c <= 4 && countThis(4) >= 2) {
score = 6;
}
return score;
}
这是您更新的Fiddle