如何在 if 条件中执行两个变量?这里我有几个 else if,但我想要 100 个 else if!有没有更短的方法?
$(document).on('click', '.btn-next', function () {
var z = [];
var recipientsArray = z.sort();
var zDuplicate = [];
$('option:selected.exclude_global').each(function() {
z.push($(this).val())});
for (var i = 0; i < recipientsArray.length - 1; i++) {
if (recipientsArray[i + 1] == recipientsArray[i]) {
zDuplicate.push(recipientsArray[i]);
}else if(recipientsArray[i + 2] == recipientsArray[i]){
zDuplicate.push(recipientsArray[i]);
}else if(recipientsArray[i + 3] == recipientsArray[i]){
zDuplicate.push(recipientsArray[i]);
}else if(recipientsArray[i + 4] == recipientsArray[i]){
zDuplicate.push(recipientsArray[i]);
}
}
if(zDuplicate.length>>0){
alert("Global Filter Already Exists");
event.preventDefault();
}
});
这里我有几个 else if,但我想要 100 个 else if!有更短的路吗?我有一个带有动态行的动态表。当我的表有 5 行时,代码可以正常工作,但是当我的表有 5 行时,代码就无法工作。
最佳答案
您正在寻找的称为嵌套循环。基本上,您可以在循环中编写循环。 (实际上,你想要多少就多少。尽管它很快就会变得丑陋。)
考虑你的循环结构:
for (var i = 0; i < recipientsArray.length - 1; i++) {
// check if recipientsArray[i] equals any other element
}
好吧,这只是另一个循环:
for (var i = 0; i < recipientsArray.length - 1; i++) {
for (var j = i + 1; j < recipientsArray.length - 1; j++) {
if (recipientsArray[j] == recipientsArray[i]) {
zDuplicate.push(recipientsArray[i]);
break;
}
}
}
请注意,可能有一种更有效的方法来检查重复项。 (特别是如果集合已排序。)至少我改变了逻辑,这样您就不会重新比较已经进行的比较。 (我通过在 i + 1
处启动内部循环来实现此目的,而不是像您的逻辑那样在 1
处启动。)
我还认为我已经通过使用break
语句复制了您的else if
结果。因为您的 else if
逻辑基本上意味着“一旦找到一个,就停止寻找”。这就是这个 break
应该做的事情,或者至少是打算做的事情,但您需要测试一下。如果没有(嵌套有时会令人困惑,这就是为什么应该小心地完成)那么你可能可以 make use of labels达到同样的效果。
最终,无论您如何实现,概念都是相同的。您询问如何迭代数组中的多个值。这就是循环的用途。
关于javascript - 编写一长串 if-else-if 的简短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840918/