我有2个数组。我想浏览每个数组并查找每个数组中1个数字加起来特定数量x
的次数。
如果达到特定金额x
的次数与另一个设定数n
的次数相同,则该函数应打印“是”。如果x
未达到n
的设定数量,则该功能应打印“否”。
x
,n
和两个数组的值都在字符串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));
答案 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。