比较2个数组以输出总整数

时间:2013-10-31 11:54:34

标签: javascript arrays if-statement for-loop

我有2个数组。我想浏览每个数组并查找每个数组中1个数字加起来特定数量x的次数。

如果达到特定金额x的次数与另一个设定数n的次数相同,则该函数应打印“是”。如果x未达到n的设定数量,则该功能应打印“否”。

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

我已经设置了2个for循环来运行每个数组,并设置了if语句来检查x会议n的条件。

我在这段代码中使用的数组应打印出'YES'的结果,但每次运行代码时我都会收到'NO'?我试过修改代码但没有任何效果。

有关此代码损坏的位置以及如何解决问题的想法吗?

谢谢:)

代码:

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

1 个答案:

答案 0 :(得分: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。