Переменная массива, переданная в функцию в Javascript, становится неопределенной - PullRequest
0 голосов
/ 07 января 2020

Извиняюсь, если об этом спрашивали иными способами, но моего гугл-фу сегодня не хватает. Я только начал изучать Javascript сегодня, и у меня возникла проблема с передачей массивов в функции. Я пытаюсь добавить значения двух массивов для каждого индекса, но игровая площадка кода sololearn выдает ошибку при попытке прочитать длину arr1 во второй функции: «Uncaught TypeError: Невозможно прочитать свойство 'length' undefined" ,

Я попытался изменить итератор на «i <= 6», но затем он сообщает, что не может прочитать свойство с индексом 0 undefined в строке «sum [i] ...». Я также попытался объявить массивы с помощью var вместо let. </p>

Может кто-нибудь подсказать мне, почему массив не передается в функцию должным образом?

function generateStats(){
    let race = "halfOrc";
    const halfOrc = [2,1,0,0,0,0];
    let stats = [0,0,0,0,0,0];

    switch(race){
        case "halfOrc":
            stats = sumArray(stats,halfOrc);
            break;

    //more code
}

function sumArray(arr1,arr2){
        var sum = [];
        for (let i = 0; i <= arr1.length;) {
            sum[i] = arr1[i] + arr2[i];
            i++;
        return sum
        }
    }

1 Ответ

2 голосов
/ 07 января 2020
Например, массив

длины 2 имеет допустимые индексы 0 и 1, поэтому никогда не используйте <= при сравнении с array.length - </p>

, который вы также возвращаете в для l oop, поэтому только будет запущена первая итерация -

быстрое исправление ... измените i <= на i < и переместите return sum после } и переместите i++ в строку для l oop.

Вот ваш код - теперь он работает

function generateStats() {
  let race = "halfOrc";
  const halfOrc = [2, 1, 0, 0, 0, 0];
  let stats = [0, 0, 0, 0, 0, 0];

  switch (race) {
    case "halfOrc":
      stats = sumArray(stats, halfOrc);
      break;

      //more code
  }
  console.log(stats);
}

function sumArray(arr1, arr2) {
  var sum = [];
  for (let i = 0; i < arr1.length; ++i) {
    sum[i] = arr1[i] + arr2[i];
  }
  return sum
}
generateStats();
...