【问题标题】:Can't get three result on array of length three with three conditions在三个条件下无法在长度为三的数组上获得三个结果
【发布时间】:2018-08-13 18:23:52
【问题描述】:

我的循环出现问题,其中我有一个长度为 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

如何,我可以改进我的逻辑以获得我的预期结果,即在三个不同条件下检查长度为三的数组只有三个结果。

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

【问题讨论】:

  • 对不起,你的逻辑无法达到你想要的结果。您需要更具体地说明当多个条件的计算结果为 false 时如何协调所发生的情况。

标签: javascript node.js logic


【解决方案1】:

问题是,在每个 if 语句之后都有 else。这意味着,在每次迭代中,您总是会有 3 个输出。你只需要 if,或者 if 和 else if。也可以使用 continue 或 return,成功后进入下一次迭代。

【讨论】:

  • 是的,但这也不会给我,如果数组长度为 2,如 myArray = ['a','z'] 那么我的预期结果呢?
  • 为了让事情更清楚,请使用对象,而不是字符串。比你可以指定属性并像标记一样使用它来知道你应该使用哪些条件。
  • @SyedMuhammadAsad 长度为 2 的数组的预期结果是什么?
  • @Barmar for array (q, x) 结果应该是 x, b, c。
【解决方案2】:

正如上面的答案所指出的,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 语句的值。

【讨论】:

    【解决方案3】:

    您的问题是,每次循环运行时,它都会使用三个不同的 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
    

    【讨论】:

    • 我上面已经解释过myArray,它可以是[p, z, y],那么在这种情况下结果会是a, b, c 但结果应该是a, y, z。跨度>
    猜你喜欢
    • 2011-10-21
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多