2

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

如果达到特定数量x的次数与另一个设定数量一样多,n则该功能应打印“是”。如果x未达到设定的数量,n则该功能应打印“NO”。

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

我设置了 2 个for循环来遍历每个数组和一个if检查满足条件的x语句n

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

关于此代码在哪里损坏以及如何解决问题的任何想法?

谢谢 :)

代码:

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)); 
4

1 回答 1

2

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。

于 2013-10-31T11:57:48.420 回答