我对循环有问题,在该循环中我有一个数组,数组的长度为3,我想检查该数组上的三个条件,而只希望三个结果不超过三个。
var myArray = ['x','q','z'] // or array may also be myArray = ['p','z','y'] or ['q', 'x'] or something like this
for (var i = 0; i < myArray.length; i++) {
if (myArray[i] == 'x') {
console.log('x')
} else {
console.log('a')
}
if (myArray[i] == 'y') {
console.log('y')
} else {
console.log('b')
}
if (myArray[i] == 'z') {
console.log('z')
} else {
console.log('c')
}
}
结果是:
x
b
c
a
b
c
a
b
z
但是我想要的结果是
x
b
z
如何改善我的逻辑以获得预期的结果,即使用三种不同条件检查长度为3的数组时只有三个结果。
无论数组长度是多少,对于给定的三个条件,我都必须获得三个结果。
答案 0 :(得分:1)
问题是,在每个if语句之后,您还有其他。这意味着,在每次迭代中,您总是会有3个输出。您只需要if或if if else else。也可以使用continue或return返回成功的下一个迭代。
答案 1 :(得分:1)
如以上答案所指出的,对于for
循环的每次迭代,有3对条件条件打印3个值。因此,如果我们匹配了获胜者或其对应的后备值(在else语句中),我们需要一种机制来continue
循环到下一个迭代。这是我能想到的:
var myArray = ['q', 'x', 'z']
var ifArray = ['x', 'y', 'z'];
var elseArray = ['a', 'b', 'c']
function test(jackpot, fallback) {
for (var i = 0; i < myArray.length; i++) {
if (myArray[i] == jackpot) {
return jackpot;
}
}
return fallback;
}
for (var i = 0; i < ifArray.length; i++) {
var result = test(ifArray[i], elseArray[i]);
console.log(result);
}
myArray
显然是myArray
,ifArray
包含if
语句的值,而elseArray
包含else
语句的值问题。
答案 2 :(得分:-1)
您的问题是,每次循环运行时,它都会使用三个不同的if-else语句检查每个数组项。基本上,它检查每个项目是否为'x',是否每个项目为'y',以及每个项目是否为'z'。这就是为什么输出的字母比预期的多得多的原因。
一种更好的方法是先检查循环的迭代,然后基于此执行if-else语句。
var myArray = ['x', 'q', 'z']
for (var i = 0; i < myArray.length; i++) {
// Only checks during first iteration (When myArray[i] == 'x')
if (i === 0) {
if (myArray[i] == 'x') {
console.log('x')
} else {
console.log('a')
}
// Only checks during second iteration (When myArray[i] == 'q')
} else if (i == 1) {
if (myArray[i] == 'y') {
console.log('y')
} else {
console.log('b')
}
// Only checks during third iteration (When myArray[i] == 'z')
} else if (i == 2) {
if (myArray[i] == 'z') {
console.log('z')
} else {
console.log('c')
}
}
}
// Result:
//x
//b
//z