使用嵌套for循环比较两个数组

时间:2017-06-10 17:47:55

标签: javascript arrays algorithm

问题:给定两个数组xyx Alice 得分,y鲍勃得分。比较Alice和Bob之间的相似指数,并给出1个指向任何大于每个比较指数的指数(如果等于则没有点)。

INPUT:

x = [4,1,6]
y = [1,1,5]

预期输出:

{Alice:2, Bob: 0}

我的代码:

x = [4,1,6]
y = [1,1,5]

results = {'Alice':0, 'Bob': 0}

for (var i = 0; i < x.length; i++){
  for (var j = 0; j < y.length; j++){
    if (x[i] > y[j]){
      results['Alice'] += 1
    }else if (x[i] < y[j]){
      results['Bob'] += 1
    }
  }
}

console.log(results)

实际输出:

{Alice: 5, Bob: 2}

问题:

我的代码在哪里出错了?

3 个答案:

答案 0 :(得分:3)

错误是您使用第一个数组中的第一个值查看所有可能的对,第二个数据中的第二个值。但只需要比较相同位置中的值。所以你只需要一个循环:

&#13;
&#13;
x = [4,1,6]
y = [1,1,5]

results = {'Alice':0, 'Bob': 0}

for (var i = 0; i < x.length; i++){
    if (x[i] > y[i]){
      results['Alice'] += 1
    }else if (x[i] < y[i]){
      results['Bob'] += 1
    }
}

console.log(results)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

问题是你不应该使用嵌套循环。你在这里做的是按照以下顺序比较Alice的所有结果:

  • Alice [0] vs. Bob [0] - 1指向Alice
  • Alice [0] vs. Bob [1] - 1指向Alice
  • Alice [0] vs. Bob [2] - 1指向Bob
  • Alice [1] vs. Bob [0] - Tie
  • Alice [1] vs. Bob [1] - Tie
  • Alice [1] vs. Bob [2] - 1指向Bob
  • Alice [2] vs. Bob [0] - 1指向Alice
  • Alice [2] vs. Bob [1] - 1指向Alice
  • Alice [2] vs. Bob [2] - 1指向Alice

要解决此问题,请删除内部循环并j,然后使用i

&#13;
&#13;
var x = [4, 1, 6]
var y = [1, 1, 5]

var results = {
  'Alice': 0,
  'Bob': 0
}

for (var i = 0; i < x.length; i++) {
  if (x[i] > y[i]) {
    results['Alice'] += 1
  } else if (x[i] < y[i]) {
    results['Bob'] += 1
  }
}

console.log(results)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您正在将x数组的每个元素与y数组的所有元素进行比较。为了获得预期的输出,你需要比较第一个元素或数组x与数组y的第一个元素,第二个元素与第二个元素....

我希望这会有所帮助!!