2014-12-08 2 views
-1

Я хочу сортировать это предложение «У этой учетной записи неподтвержденный адрес электронной почты» по длине слова, как я могу это сделать.почему я получаю эту ошибку? Uncaught TypeError: Can not read property 'length' of undefined

<script> 
$(document).ready(function(){ 
var some = ""; 
xx = ""; 
var vText = "This account has an unconfirmed email address"; 
    slitTxt = vText.split(" "); 
    for(i=0; i <= slitTxt.length; i++){ 
     xx = slitTxt[i].length; 
     some = $('body').append(xx+" ") 

    } 


}); 
</script> 
+0

Попробуйте 'console.log (slitTxt)' и посмотреть, что он возвращается. –

+1

Из одной ошибки: '<=', а не строго '<'. В любой системе с нулевым индексированием он определенно истинно, что 'slitTxt [slitTxt.length]' не определен. Вы можете выполнить основную отладку, чтобы раскрыть эту проблему для себя (например, проверить значение 'xx' или' slitTxt [i] 'в каждой итерации цикла). – apsillers

ответ

1

вы проверяете для LastIndex + 1, что does'nt существует или не определено, удалить равно подписать из условия цикла замены «< =» с «<»

, например, если длина массива 5 с использованием < = array.length означает, что чек на 5 или менее 5, здесь первый индекс 0 и последнее 4 так 5 неопределен

<script> 
$(document).ready(function(){ 
var some = ""; 
xx = ""; 
var vText = "This account has an unconfirmed email address"; 
    slitTxt = vText.split(" "); 
    for(i=0; i < slitTxt.length; i++){ 
     xx = slitTxt[i].length; 
     some = $('body').append(xx+" ") 

    } 


}); 
</script> 
1

ошибка приходят из этой линии:

for(i=0; i <= slitTxt.length; i++) 

Массив 0 индексированные, что означает, что первая ячейка 0, но длина будет 1

Так что, если вы массив содержит 5 элементов, последний из которых будет arr[4] или arr[arr.length-1]

Итак, когда ваше состояние в цикле for равно i <= slitTxt.length, последняя итерация будет такой же, как slitTxt[slitTxt.length], следовательно, это будет undefined.

Try, что вместо того, чтобы:

for(i=0; i < slitTxt.length; i++) 
0

Вы можете использовать map() вместо цикл. Пример:

var vText = "This account has an unconfirmed email address", 
 
    slitTxt = vText.split(" "); 
 
slitTxt.map(function(val, ind){$('body').append(val + " ");});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
 
<html><body></body></html>