在javascript中我试图自动化输入框中最多6个整数的成对比较,比较输入的数字,直到3个数字在0.2之内。没有必要输入所有6个值以使三个数字在0.2之内,因此6个潜在输入值中的一些可能保持为空或0,但在比较中应忽略这些值。
我已经将变量加载到一个函数中,即var fev1 = document.getElementById('fevOne')。value,但我不确定除了写出每一个可能的情况之外如何比较每个变量。< / p>
有没有人知道我应该怎么做?
我的稀疏示例代码如下......
<head>
function reproduce() {
var fev1 = document.getElementById('fevOne').value;
var fev2 = document.getElementById('fevTwo').value;
var fev3 = document.getElementById('fevThree').value;
var fev4 = document.getElementById('fevFour').value;
var fev5 = document.getElementById('fevFive').value;
var fev6 = document.getElementById('fevSix').value;
//essentially, I don't know where to begin in building this formula, but imagine that I would need to use a loop
}
</head>
<body>
<input type="text" name="fevOne" id="fevOne" value="">
<input type="text" name="fevTwo" id="fevTwo" value="">
<input type="text" name="fevThree" id="fevThree" value="">
<input type="text" name="fevFour" id="fevFour" value="">
<input type="text" name="fevFive" id="fevFive" value="">
<input type="text" name="fevSix" id="fevSix" value="">
</body>
对于一些背景知识,我正在建立一种医学形式,它将确定是否以足够的重复性收集肺功能测量值(1秒内用力呼气量,FEV1,以升为单位测量)(即在0.2L内的3倍)彼此),意图是将这3个值中的最高值作为临床相关值,存储给患者。
提前感谢您的帮助!
罗里
答案 0 :(得分:1)
快速而肮脏:https://jsfiddle.net/8081wucv/2/
function check() {
var text = document.getElementById('check');
声明函数并获取我将放置文本位的元素
var values = [];
for (var i = 0; i < 6; i++) {
var value = document.getElementById('fev' + i).value;
if (/\d+\.?\d*/.test(value)) {
values.push(value);
}
}
初始化数组并循环遍历元素。如果他们只是带有可选点的数字,那么将其推到数组
values.sort();
var passing = false;
对数组进行排序,以便我们可以轻松地进行下一次检查并初始化表示测试是否通过的布尔值。
for (var x = 0; x < values.length; x++) {
if (values[x + 2] - values[x] <= 0.2) {
passing = true;
break;
}
}
循环遍历数组。如果有3个元素(前面2个元素,在排序数组中,减去这个元素),差异为0.2或更小,则测试通过。
if (passing) {
text.innerHTML = 'passing';
} else {
text.innerHTML = 'not passing';
}
}
更新文字。
如果您只想要一个功能,可以删除最后一个块并将其更改为return passing;
。
答案 1 :(得分:0)
不确定这一点,但是比较Min和recurse呢?
var inp = document.querySelectorAll('input'), // Jack's solution is more elegant.
fevArray = [];
[].forEach.call(inp, (e) => {
if (e.value) {
fevArray.push(parseFloat(e.value,10));
}
});
var recursiveCheck = function(arr){
if (arr.length >= 3) {
// If Max and min difference is not in the interval, change max with the second greatest value and recurse.
if ((Math.max.apply(null, arr) - Math.min.apply(null, arr) <= 0.2)) {
return arr;
}
recursiveCheck(arr.splice(arr.indexOf(Math.max.apply(null, arr)),1));
}
}
console.log("result", recursiveCheck(fevArray)); // should return undefined if not meeting conditions, or the array otherwise.
答案 2 :(得分:0)
一般的想法是在使用比较所有输入组合的嵌套循环结构对其中一个进行更改时检查所有输入。它必须是临床使用的防弹,并允许技术人员改变主意,擦除,改变和纠正价值观。请注意,如果已完成肺活量测定并输入所有结果,则此示例将报告最大的临床症状,而不是最小化两个测试结果之间的差异。
请注意,此示例的HTML使用基于零的“data-index”属性标识每个输入,而不是“id”属性。通常在窗口加载事件触发后调用“fevSetup”函数,同时运行代码片段直接调用它。由于JavaScript,最大差异略有增加 十进制算术并不总是准确的(我没有存储技术人员输入的文本,这可能更适合报告目的)。
function fevSetup() {
var MAX_DIFF = 0.2000001;
var values = [];
var i,j;
var fevInputs = document.querySelectorAll('[data-type=fev]');
for( i = 0; i < fevInputs.length; ++i) {
fevInputs[i].addEventListener("change", checkFev);
}
function checkFev() {
var thisFev = Number( this.value);
var index = Number(this.dataset.index);
if(isNaN( thisFev) || thisFev <= 0) {
console.log("Invalid input: " + this.value)
this.value = "";
thisFev = undefined;
}
values[ index] = thisFev // may erase a previous entry
var clinicalFevs = [];
for( var i = 0; i < values.length-1; ++i) {
for( var j = i+1; j < values.length; ++j) {
if( values[i] && values [j]
&& (Math.abs( values[j] - values[i]) <= MAX_DIFF)) {
clinicalFevs.push( Math.max (values[i], values[j]));
}
}
}
if( clinicalFevs.length) {
var clinicalFev = Math.max.apply(Math, clinicalFevs);
console.log("Clinical Fev: %s", clinicalFev);
}
}
}
// window.addEventListent("load", fevSetup);
fevSetup(); // for testing
<input type="text" data-type="fev" data-index="0" value="">
<input type="text" data-type="fev" data-index="1" value="">
<input type="text" data-type="fev" data-index="2" value="">
<input type="text" data-type="fev" data-index="3" value="">
<input type="text" data-type="fev" data-index="4" value="">
<input type="text" data-type="fev" data-index="5" value="">
当然,此代码按原样提供,没有任何形式的保证或适用性声明。但是,我希望它能为你提供一些东西。