Список для чтения: функция работает, но выдаёт typeerror

Нужный результат в итоге получается, но минибраузер выдаёт ошибку TypeError : arr[i] is undefined. Как он может быть undefined? Нужно специально как-то прописывать, что первый аргумент функции - массив? Или приводить arr[i] к строке?

Сводка

var sortBooks = function (arr, min, max) {
var newArr = [];
for (var i = 0; i <= arr.length; i++) {
if (arr[i].length >= min && arr[i].length <= max) {
console.log(arr[i], arr[i].length);
newArr.push(arr[i]);
console.log(newArr);
}
};
return newArr;
}

var filteredBooks = sortBooks(books, minNumber, maxNumber);

не могу подтвердить ошибку, у меня TypeError : Cannot read property ‘length’ of undefined в этом коде
чтобы ее решить, нужно проходить до длины исходного массива, потому что вы пытаетесь взять длину у элемента массива arr[arr.length], а такой элемент undefined
если чо, последний элемент массива имеет индекс arr.length - 1, а индекс arr.length на единицу больше, соответственно он не существует, но на него ссылаются, значит он undefined

P.S. чекнул в мозилле, да, там другая ошибка (т.е. как у вас), но суть не меняется. имхо хромовский отладчик более информативен

вопрос вам со звездочкой: чему равен length у массива? (у любого, есть формула расчета)

Да, действительно, проблема была в длине массива. Тупая ошибка :frowning: Тогда понятно, почему всё сначала работало-работало, а потом раз - и undefined.

Нагуглила следующую формулу длина массива: индекс последнего элемента + 1.

во, собственно поэтому и спросил, чтобы вы поняли, что по массиву нельзя пройтись включительно до длины массива =) интервальная алгебра, все дела