在三个条件下,长度为三的数组无法获得三个结果

时间:2018-08-13 18:23:53

标签: javascript node.js logic

我对循环有问题,在该循环中我有一个数组,数组的长度为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的数组时只有三个结果。

无论数组长度是多少,对于给定的三个条件,我都必须获得三个结果。

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显然是myArrayifArray包含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