【发布时间】:2021-09-28 09:50:48
【问题描述】:
我仍在学习 javascript,为了练习,我在 codewars.com 上进行了一系列练习,但其中一个遇到了问题。 请求如下: 给定一个整数数组。
返回一个数组,其中第一个元素是正数的计数,第二个元素是负数的总和。
如果输入数组为空或null,则返回一个空数组。
对于输入 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, -12, -13, -14, -15],您应该返回 [10, -65 ].
我制定了以下适用于所有情况的算法:
function countPositivesSumNegatives(input) {
var arrOutput = []; //declare the final array
var pos = 0; //declare the positive
var neg = 0; //declare the negative
var check, ss;
for (var x = 0; x < input.length; x++){
if(input[x]>0){ pos++; }
else{ neg = neg + input[x] ; }
arrOutput = [pos, neg]
}
return arrOutput;
}
但它返回了以下错误:
TypeError: Cannot read property 'length' of null
at countPositivesSumNegatives (test.js:8:29)
at Context.<anonymous> (test.js:39:18)
at processImmediate (internal/timers.js:461:21)
由于这个错误,我无法通过测试。 我该如何解决它,为什么它会给我这个错误?
【问题讨论】:
-
If the input array is empty or null, return an empty array.并不总是传递给你一个数组,有时你也会传递给null。如果input为空,则input.length不起作用。您需要检查代码中某处的null。 -
之前的评论说得对。只需添加对 null 的检查: if (input === null) ... 您还想将 arrOutput = [pos, neg] 移到循环之外,否则每次迭代只是覆盖相同的变量。
标签: javascript arrays list algorithm