функция возвращает NaN, когда индекс массивов определяется через цикл - PullRequest
0 голосов
/ 21 ноября 2018

Я делаю проект, и эта функция возвращает NaN.В прошлый раз, когда у меня была эта проблема, я исправил ее, определив переменную, равную 0. Однако она не работает.

var avstandArray = [
  [0, 62.3, 58.8, 44.6, 33.2],
  [62.3, 0, 37.9, 65.3, 60.1],
  [58.8, 37.9, 0, 40.5, 78.5],
  [44.6, 65.3, 40.5, 0, 77.6],
  [33.2, 60.1, 78.5, 77.6, 0]
]

var reiserute = [0, 1];

function ruteFunction() {
  var z = 0;
  for (var i = 0; i < reiserute.length; i++) {
    z += avstandArray[reiserute[i]][reiserute[i + 1]];
  }
  return z;
}

console.log(ruteFunction());

Ответы [ 4 ]

0 голосов
/ 21 ноября 2018

Проблема в том, что

z+= avstandArray[reiserute[i]][reiserute[i+1]];

приведенный выше код будет пытаться получить значение из массива reiserute для n + 1-го элемента, который не определен, и добавление неопределенного элемента в число вызовет исключение NaN.Так что измените логику соответственно.

for (var i = 0; i < reiserute.length; i++) {
if(i!=reiserute.length)
    z+= avstandArray[reiserute[i]][reiserute[i+1]];
else
    z+= avstandArray[reiserute[i]];
}
0 голосов
/ 21 ноября 2018

Не уверен, что вы пытаетесь достичь здесь, хотя, это проблема:

ваша переменная "reiserute" не имеет значения, это пустой массив, и вы пытаетесь получить доступ к значению вразличные индексы, так как нет доступных данных, javascript вернет «undefined».

reiserute[i] ----> undefined

теперь вы пытаетесь найти значение, передающее reiserute [i], которое по сути не определено.когда вы пытаетесь получить доступ к значению массива с помощью индекса, javascript ожидает, что ваш индекс будет целым числом, так как ваш индекс был оценен как неопределенный, он выдал ошибку NaN - Nan означает "NotANumber".

сейчас, вы получаете выходные данные как «0», потому что длина массива равна нулю и условие не выполняется в первой проверке, следовательно, цикл не выполняется.

Если ваш цикл выполняется, вы получите NaN какошибка.

0 голосов
/ 21 ноября 2018

Заголовок вашего цикла выглядит следующим образом:

for (var i = 0; i < reiserute.length; i++)

Это означает, что i будет варьироваться от 0 до reiserute.length - 1 включительно.

Затем в теле вашего цикла вы делаете следующее:

z += avstandArray[reiserute[i]][reiserute[i + 1]];

Обратите особое внимание на reiserute[i + 1].Поскольку i работает с 0 до reiserute.length - 1, i + 1 будет варьироваться от 1 до reiserute.length.Итак, на последней итерации вы пытаетесь получить доступ к reiserute[reiserute.length].И это будет undefined - вы пытаетесь получить доступ к индексу «один за пределами» конца массива.

Итак, вы оцениваете

avstandArray[reiserute[i]][undefined]

который сам по себе undefined.Затем += принудительно приводит это к Number, откуда исходит ваше NaN.

Хотя я не уверен, каково точное намерение, стоящее за вашим кодом, самым простым решением было быизмените заголовок вашего цикла, чтобы не получать доступ к элементам, кроме последнего в массиве.То есть сделайте это вместо:

for (var i = 0; i < reiserute.length - 1; i++)

0 голосов
/ 21 ноября 2018

Это возвращает 0 без каких-либо проблем.Как вы определили, var reiserute = []; цикл for даже не работает один раз.

var avstandArray = [
[0, 62.3, 58.8, 44.6, 33.2],
[62.3, 0, 37.9, 65.3, 60.1],
[58.8, 37.9, 0, 40.5, 78.5],
[44.6, 65.3, 40.5, 0, 77.6],
[33.2, 60.1, 78.5, 77.6, 0]
]

var reiserute = [0,1];

function ruteFunction(){
var z = 0;
for (var i = 0; i < reiserute.length; i++) {
    z+= avstandArray[reiserute[i]][reiserute[i+1]];
    console.log(z);
}
return z;
}

console.log(ruteFunction());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...