我有4个输入字段,让用户输入这4家公司在特定区域的重要性(排名),如下所示:
<table> <tr><th></th><th>Area 1</th></tr> <tr><td>Company A</td><td><input type="text" name="text1" id="text1"></td></tr> <tr><td>Company B</td><td><input type="text" name="text2" id="text2"></td></tr> <tr><td>Company C</td><td><input type="text" name="text3" id="text3"></td></tr> <tr><td>Company D</td><td><input type="text" name="text4" id="text4"></td></tr> </table>
输入字段不是必需的,应该是从1到4的整数(假设没有重复),
用户无法跳跃排名,这意味着排名必须是唯一且连续的.
例如,*我们可以输入1,3,2以及4,2,1,3.
但是当输入类似于3,1时,我们需要警报2丢失.
当我们输入3时,我们需要警告1和2都丢失.
这是我检查排名的代码:
function checkMissingRank(object){ object.change(function() { var max = 0; var actSum = 0; var rows = object.length; for(var i=1 ; i<=rows ; i++){ if($('#text'+i+'').val() != ""){ var actVal = parseInt($('#text'+i+'').val()); //The actual sum of the values actSum = actSum + actVal; if(actVal>max){ //Use the max to calculate the total sum should be max=actVal; } } } //The total sum should be totalSum = ((1+max)*max)/2; //The difference is the missing value var missVal = totalSum - actSum; if(missVal != 0){ alert("Ranking "+missVal+" is missing."); } }); } checkMissingRank($('input[name^="text"]'));
当只有一个值丢失时,它工作正常,但是当有2个值缺失(1,2)时,它只返回它们的总和(3).我该如何改进?
解决方法
您可以这样做以检查数组中是否缺少数字(来自Dasari Srinivas的原始代码):
function foo(num) { if (num.length == 0) { return 0; } var set = []; var res = []; var max = 1; for (var i = 0; i < num.length; i++) set.push(num[i]); for (var i = 0; i < num.length; i++) { var left = num[i] - 1; var right = num[i] + 1; var count = 1; while (set.indexOf(left) != -1) { count++; set.splice(set.indexOf(left),1); left--; res["min"] = left; } while (set.indexOf(right) != -1) { count++; set.splice(set.indexOf(right),1); res["max"] = right; right++; } max = Math.max(count,max); } console.log(res); return max; } var array2 = [4,3]; if (foo(array2) == array2.length) { alert("no missing"); } else { alert("missing"); } array2 = [5,3]; if (foo(array2) == array2.length) { alert("no missing"); } else { alert("missing"); }
<p>first array => [4,3];</p> <p>second array => [5,3];</p>