javascript – jQuery – 实现独特的连续排名

前端之家收集整理的这篇文章主要介绍了javascript – jQuery – 实现独特的连续排名前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有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>
原文链接:https://www.f2er.com/jquery/156850.html

猜你在找的jQuery相关文章