jQuery-实现唯一的连续排名

jQuery - Implement unique continuous ranking

本文关键字:连续 实现 唯一 jQuery-      更新时间:2023-09-26

我有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的整数(假设没有重复),

用户不能跳转排名,这意味着排名必须是唯一的和连续的。

例如,*我们可以输入132以及4213

但当输入类似于31时,我们需要提醒2丢失。

当我们输入3时,我们需要提醒12都丢失了。

这是我检查排名的代码:

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"]'));

当只缺少一个值时,它可以正常工作,但当缺少两个值(12)时,它只返回它们的和(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, 1, 2, 3];
if (foo(array2) == array2.length) {
    alert("no missing");
} else {
    alert("missing");
}
array2 = [5, 1, 2, 3];
if (foo(array2) == array2.length) {
    alert("no missing");
} else {
    alert("missing");
}
<p>first array =>  [4, 1, 2, 3];</p>
<p>second array => [5, 1, 2, 3];</p>

Am在这里使用不同的逻辑。只是在没有编译和检查错误的情况下对其进行了编码。但是,逻辑应该适用于您的场景。

function checkMissingRank(object){
  object.change(function() {
    var max = 0;
    var actSum = 0;
    var rows = object.length;
    var missingVal = ["1", "2", "3", "4"];
    for(var i=1 ; i<=rows ; i++){
        if($('#text'+i+'').val() != ""){
            var actVal = $('#text'+i+'').val();
            if( missingVal.indexOf(actVal) !== -1){
                var index = missingVal.indexOf(actVal);
                missingVal.splice(index, 1);
            }

        }
    }
    if(missingVal.length > 1){ 
        var alertMsg = "Ranking ";
        for(var i = 0; i < missingVal.length; i++){
            alertMsg += missingVal[i];
            if( i < (missingVal.length -1) ){
                  alertMsg += ",";
            }   
        }
        alertMsg += " is missing.";
        alert(alertMsg);
    }
  });
}
checkMissingRank($('input[name^="text"]'));