无法读取属性'长度' null错误

时间:2017-03-04 06:52:58

标签: javascript arrays

这是我的代码错误:

   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 个答案:

答案 0 :(得分:3)

听起来你有一些针对你的代码运行的自动化测试,他们正在检查你如何处理错误的输入。您的代码未设置为处理除预期的数字数组之外的任何内容,因此它无法通过这些测试。

你可以通过很多方式解决这个问题,但这很简单,只需要

if (input === null) {
    return 'Input invalid'; // or something like that
}
// put your for loop here

会做到这一点。有可能,您可能会面临更多需要处理意外输入的测试用例。我希望这会有所帮助。

答案 1 :(得分:1)

正如melpomene所暗示的那样,由于您尝试在.length对象上调用null,因此会抛出该类型错误。

由于是出现了错误的值测试&#34;,听起来测试套件正在针对您的解决方案运行,其中一个测试是检查您是否正在处理错误{ {1}},你不是,因此错误。

我建议在开始处理之前对input进行一些验证。只需在顶部放置一个input块,确保if不是input,实际上是一个数字数组。

我假设您有关于无效null时该怎么做的说明?也许只是回来?

答案 2 :(得分:0)

你应该能够处理null数组..

以下是解决这个问题的方法(检查null):

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