无法读取空错误的属性“长度”
2017-03-04
5251
这是我的代码的错误:
TypeError: Cannot read property 'length' of null
at countPositivesSumNegatives
at /runner/frameworks/javascript/cw-2.js:179:21
at Promise._execute
at Promise._resolveFromExecutor
at new Promise
at describe
at Object.handleError
at ContextifyScript.Script.runInThisContext
at Object.exports.runInThisContext
目标是创建一个函数,该函数接受一个随机数字数组(输入),并返回正数的数量和负数的总和。除了我上面收到的错误消息外,一切都正常,该错误消息是针对错误值测试的,无论它意味着什么
function countPositivesSumNegatives(input)
{
let negSum = 0;
let count = 0;
let arr = [];
for(i = 0; i < input.length; i++) {
if(input[i] > 0)
{
count++;
}
if (input[i] < 0)
{
negSum += input[i];
}
if (!input[i]) {
negSum = negSum;
count = count;
}
}
arr.push(count,negSum);
return arr;
}
}
3个回答
听起来好像您的代码正在运行一些自动化测试,它们正在检查您如何处理错误输入。您的代码未设置为处理除预期的数字数组之外的任何内容,因此它无法通过这些测试。
您可以通过多种方式解决这个问题,但像
if (input === null) {
return 'Input invalid'; // or something like that
}
// put your for loop here
这样简单的方法就可以解决问题。很有可能,您可能会面临更多需要处理的意外输入的测试用例。希望这对您有所帮助。
coralvanda
2017-03-04
正如 melpomene 所暗示的,抛出该类型错误是因为您试图在
null
对象上调用
.length
。
由于是“错误值测试”的结果,听起来像是针对您的解决方案运行测试套件,其中一个测试是检查您是否处理了错误的
input
,而您没有,因此出现错误。
我建议在开始处理
input
之前对其进行一些验证。只需在顶部放置一个
if
块,确保
input
不是
null
,实际上是一个数字数组。
我假设您有关于在
input
无效的情况下该怎么做的说明?也许只是返回?
jfriesenhahn
2017-03-04
您应该能够处理空数组..
以下是解决该问题的方法(检查是否为空):
function countPositivesSumNegatives(input) {
let negSum = 0;
let count = 0;
let arr = [];
if (input != null) {
for (i = 0; i < input.length; i++) {
if (input[i] > 0) {
count++;
}
if (input[i] < 0) {
negSum += input[i];
}
if (!input[i]) {
negSum = negSum;
count = count;
}
}
}
arr.push(count, negSum);
return arr;
}
Maher Abuthraa
2017-03-04