jQuery-实现唯一的连续排名
jQuery - Implement unique continuous ranking
我有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"]'));
当只缺少一个值时,它可以正常工作,但当缺少两个值(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, 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"]'));
相关文章:
- 如何使用动画实现纸张推车
- 客户端服务器REST API captcha实现
- 如何实现此布局
- Meteor忘记了密码的实现
- 使用Native Sockets在Android中实现WebSockets
- 在样板文件中实现Ajax
- instanceof是如何在JavaScript中实现的
- 如何正确实现Jquery多选小部件
- 实现一个建立在google.com之上的自定义搜索引擎
- 多个组件是如何实现的
- window.location使用jquery mobile实现chrome跳转
- 如何在OpenERP中实现网络摄像头
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- javascript加密实现,包括可信否认
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- jQuery-实现唯一的连续排名
- Twitter Bootstrap Carousel - 如何实现连续慢速滚动
- 如何在jQuery中实现连续动画
- 如何向音频元素添加侦听器以实现连续播放