geomukkath Ответов: 2

Ошибка, когда ключевое слово length используется для передачи длин в массив.


I am trying to create an array called lengths which will have all the lengths of the elements in the array new_str.
The problem is when I am trying to push each length to the lengths array it says
‘Cannot read property ‘length’ of undefined’.
PS : My plan is to use Math.max() inorder to find the maximum length of the string in the array.


Что я уже пробовал:

function findLongestWordLength(str) {
var new_str = str.trim().split(" ");
var lengths = [];
for(var i=0; i <= new_str.length; i++){
lengths.push(new_str[i].length);
}
console.log(lengths);
}

findLongestWordLength("The quick brown fox jumped over the lazy dog");

2 Ответов

Рейтинг:
7

Richard MacCutchan

Он терпит неудачу, потому что ваш цикл выходит за пределы конца массива. Индексы массива идут от нуля до длины массива - 1. Так что вы должны изменить ваш цикл for проверяемое выражение следующим образом:

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


Рейтинг:
13

OriginalGriff

Две вещи:
1) проблема, которую вы заметили, связана с вашим циклом:

for(var i=0; i <= new_str.length; i++){
Индексы работают от 0 до N - 1, где N-номер элемента в массиве. Вы пытаетесь получить доступ от 0 до N включительно, поэтому один из них не имеет значения, и вы получаете ошибку.

2) Почему это так? Просто возьмите целое число MaxValue, установите его на первое значение индекса и сравните его с текущей длиной каждый раз вокруг цикла. Зачем тратить время и память на создание массива, который вы используете только один раз?