尝试将一些非常重复的代码重写为某种循环,并弄清楚其中的逻辑,这让我的大脑有些煎熬。
原始代码看起来有点像这样:
if(a){
if(b == "foo1"){
if($('#foo2').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
//do something here
}
}
}
if(a){
if(b == "foo2"){
if($('#foo1').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
//do something here
}
}
}
if(a){
if(b == "foo3"){
if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo4').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
//do something here
}
}
}
if(a){
if(b == "foo4"){
if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo3').val() == a || $('#foo5').val() == a || $('#foo6').val() == a){
//do something here
}
}
}
if(b == "foo5"){
if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo6').val() == a){
//do something here
}
}
}
if(b == "foo6"){
if($('#foo1').val() == a || $('#foo2').val() == a || $('#foo3').val() == a || $('#foo4').val() == a || $('#foo5').val() == a){
//do something here
}
}
}
我想将其重写为一个循环(或多个循环),但正在努力使逻辑正确。
到目前为止,我有这个:
if (a){
for (i=0; i < 6; i++){
var fieldNames =[ "foo1", "foo2", "foo3", "foo4", "foo5", "foo6"]
console.log("i loop "+ fieldNames[i]);
if(b == fieldNames[i]){
for (j = 1; j < fieldNames.length; j++){
if($('#'+fieldNames[j]).val() == a){
//do something here
}
}
}
}
}
我知道这是不对的,但是任何人都可以帮助我了解逻辑应该是什么吗?
谢谢
编辑:
应阐明变量所指的内容。
此函数通过 onblur 事件上的元素内联调用 doCheck(this.value, 'foo1')
行(此示例仅涉及第一个实例,第二个实例的 b 输入为 foo2,第三个实例的 b 输入为 foo3,依此类推...
完整的函数如下所示:
function doCheck(a,b)
if (a){
for (i=0; i < 6; i++){
var fieldNames =[ "foo1", "foo2", "foo3", "foo4", "foo5", "foo6"]
console.log("i loop "+ fieldNames[i]);
if(b == fieldNames[i]){
for (j = 1; j < fieldNames.length; j++){
if($('#'+fieldNames[j]).val() == a){
//do something here
}
}
}
}
}
}
所以变量 a
是 select 元素中的值,而 b
变量是字段名称。
最佳答案
您可以生成可能字段的列表,从该列表中删除 b
,然后与其余字段进行比较。
if (a) {
var fieldNames = ['foo1', 'foo2', 'foo3', 'foo4', 'foo5', 'foo6'];
// Remove b from the fields
fieldNames.splice(fieldNames.indexOf(b), 1);
var doSomething = fieldNames.reduce(function(prev, fieldName) {
return prev && $('#' + fieldName).val() === a;
}, true);
if (doSomething) {
// do something
}
}
另一种看待这个问题的方式是这样的:
if (a) {
var fieldNames = ['foo1', 'foo2', 'foo3', 'foo4', 'foo5', 'foo6'];
// Remove b from the fields
fieldNames.splice(fieldNames.indexOf(b), 1);
var doSomething = true;
for (var i = 0; i < fieldNames.length; i++) {
if ($('#' + fieldNames[i]).val() !== a) {
doSomething = false;
break;
}
}
if (doSomething) {
// do something
}
}
关于javascript - 嵌套 if 语句的编程逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31032037/