【问题标题】:Comparing 2 arrays to output total integer比较 2 个数组以输出总整数
【发布时间】:2013-10-31 11:54:33
【问题描述】:

我有 2 个数字数组。我想遍历每个数组并找到每个数组中 1 个数字加起来特定数量 x 的次数。

如果特定数量x 与另一个集合数量n 一样多次,则该函数应打印“YES”。如果x 没有达到n 的设定数量,那么函数应该打印'NO'。

xn 和两个数组的值都在字符串 input 中。这些值已被拆分为数组,如下面的代码所示。

我设置了 2 个 for 循环来遍历每个数组和一个 if 语句,用于检查 xn 的条件。

我在这段代码中使用的数组应该打印出“是”的结果,但是每次我运行代码时都会得到“否”?我尝试修改代码,但没有任何效果。

知道这段代码在哪里出错以及如何解决问题吗?

谢谢:)

代码:

var input = '2\n3 10\n2 1 3\n7 8 9';

function processData(input) {
   var inputArray = input.split('\n');
   var n = inputArray[1][0];
   var x = inputArray[1].split(' ')[1];
   var arrayA = inputArray[2].split(' ');
   var arrayB = inputArray[3].split(' ');
   var total = 0;

   for(var i = 0; i < arrayA.length; i++) {
      for(var j = 0; j < arrayB.length; j++) {
          if(arrayA[i] + arrayB[j] == x) {
              total = total + 1;
          } if (total == n) {
              return 'YES';
          }
      }
  }
  return 'NO';
}

console.log(processData(input)); 

【问题讨论】:

    标签: javascript arrays if-statement for-loop


    【解决方案1】:

    arrayA[i]arrayB[j] 是字符串,因此 arrayA[i] + arrayB[j] 将是它们的串联(例如:'2' + '3' === '23')。

    如果你的逻辑是正确的(我不太明白你在做什么),在添加它们之前将它们转换为数字就足够了,使用 parseInt 或其他方法:

    if(+arrayA[i] + (+arrayB[j]) == +x) { // used unary + to convert to number
              total = total + 1;
          } if (total == n) {
              return 'YES';
          }
    

    PS:更简洁的版本是将数组中的每个字符串转换为数字,但这涉及的不仅仅是在代码中添加 3 个字符。

    PS2:你有一种奇怪的方式来获取输入数据。如果您从 JS 代码中的其他位置获取它,您可以简单地将其作为具有相关结构的对象传递,否则您可以以更...常见的格式传递它,例如 JSON。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2020-09-22
      • 1970-01-01
      • 2022-01-11
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多