开发者问题收集

无法读取 JavaScript 中 null 的属性“length”

2017-02-10
10664

我正在 codewars 上进行 挑战,它通过了所有测试,但我收到一个错误:

TypeError: Cannot read property 'length' of null

所以我无法通过挑战。有人能告诉我这个代码有什么问题吗?

function averages(numbers) {
  for(var i=0; i<numbers.length; i++){
    if(numbers.length < 2 || numbers[i] === ""){
      return [];
    } else {
      numbers[i] = (numbers[i] + numbers[i+1]) / 2;
    }
  }
  numbers.pop();
  return numbers
}
3个回答

您没有处理指令中的一个重要部分:

If the array has 0 or 1 values or is null or None, your method should return an empty array.

function averages(numbers) {
  if (!numbers) return []; // return empty array

  for(var i=0; i<numbers.length; i++){
    if(numbers.length < 2 || numbers[i] === ""){
      return [];
    } else {
      numbers[i] = (numbers[i] + numbers[i+1]) / 2;
    }
  }
  numbers.pop();
  return numbers
}
Turnip
2017-02-10

你只需要测试参数是否为空

  //test if numbers is null
  if(numbers == null){
    return [];
  }
  for(var i=0; i<numbers.length; i++){
    if(numbers.length < 2 || numbers[i] === ""){
      return [];
    } else {
      numbers[i] = (numbers[i] + numbers[i+1]) / 2;
    }
  }
  numbers.pop();
  return numbers
Weedoze
2017-02-10
function averages(numbers) {
  if(numbers)
  {
    for(var i=0; i<numbers.length; i++){
      if(numbers.length < 2 || numbers[i] === ""){
        return [];
      } else {
        numbers[i] = (numbers[i] + numbers[i+1]) / 2;
      }
    }
    numbers.pop();
    return numbers
  }
  else
  {
    return [];
  }

}

只需向您的数字变量添加一个空检查即可。然后您就可以开始了。

Smit
2017-02-10