Невозможно прочитать свойство 'длина' из неопределенного javascript - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в javascript и работаю над проектом, которому нужно взять массив чисел и подсчитать количество каждого типа чисел (положительные, отрицательные, нули), а затем вернуть счетчики в другом массиве. Пока что я попробовал следующий код:

let negatives = 0;
let zeros = 0;
let positives = 0;

function counter(numbersArray = [1, 2, 3, 4, 0, 0, 0, -1, -2]) {
  var returnArray = [negatives, zeros, positives]

  for (x = 0; x < numbersArray.length; x++) {
    if (numbersArray[x] < 0) {
      negatives++;
    } else if (numbersArray[x] === 0) {
      zeros++;
    } else {
      positives++;
    }
  }

  return returnArray;
}
console.log(counter());
console.log(counter());
console.log(counter());

Код возвращает его после трехкратного вызова:

counter();
(3) [0, 0, 0]
counter();
(3) [2, 3, 4]
counter();
(3) [4, 6, 8]

Я настроил его так:

var numbersArray = [1, 2, 3, 4, 0, 0, 0, -1, -2];

function counter(numbersArray) {
  var negatives = 0;
  var zeros = 0;
  var positives = 0;

  var returnArray = [negatives, zeros, positives]

  for (x = 0; x < numbersArray.length; x++) {
    if (numbersArray[x] < 0) {
      negatives++;
    } else if (numbersArray[x] === 0) {
      zeros++;
    } else {
      positives++;
    }
  }

  return returnArray;
}
console.log(counter());
console.log(counter());
console.log(counter());

Но при вызове появляется следующая ошибка:

counter();
VM82:14 Uncaught TypeError: Cannot read property 'length' of undefined
    at counter (<anonymous>:14:34)
    at <anonymous>:1:1

Я понимаю, что это означает, что мой массив не определен, хотя я не понимаю, почему потому что я определяю это в первой строке. Буду признателен за любую помощь или направление.

Ответы [ 3 ]

0 голосов
/ 25 марта 2020

вам нужно переместить ваш returnArray:

var numbersArray = [1, 2, 3, 4, 0, 0, 0, -1, -2];

function counter(numbersArray) {
  var negatives = 0;
  var zeros = 0;
  var positives = 0;

 
  for (x = 0; x < numbersArray.length; x++) {
    if (numbersArray[x] < 0) {
      negatives++;
    } else if (numbersArray[x] === 0) {
      zeros++;
    } else {
      positives++;
    }
  }
  
   var returnArray = [negatives, zeros, positives]


  return returnArray;
}

console.log(counter(numbersArray));
0 голосов
/ 26 марта 2020

Спасибо всем за помощь. Я настроил это так:

function counter (numbersArray = []){

let negatives = 0;
let zeros = 0;
let positives = 0;


    for (x = 0; x < numbersArray.length; x++){
        if (numbersArray[x] < 0) {
        negatives ++;
        } else if (numbersArray[x] === 0){
        zeros ++;
        } else {
        positives++;
        }
var returnArray = [negatives, zeros, positives]
       }

    return returnArray;
      }

Это позволяет мне передавать параметры по мере необходимости при вызове функции, такие как: counter ([1,2,3,0,4,0,0,0, - 1, -2]);

0 голосов
/ 25 марта 2020

Ошибка, вероятно, в этой строке

for (x = 0; x < numbersArray.length; x++) {

numbersArray.length вызывает эту ошибку, и это, вероятно, потому что numbersarray не инициализирован.

Если вы вызовете функцию counter без параметров, это произойдет. Вам нужно будет передать массив в качестве параметра функции counter, например:

counter([1,2,2,3,4,5]);

или иметь значение по умолчанию, как в первом примере.

...