Не може се прочитати „подела“ својства неодређеног
Ако сте икада користили ЈаваСцрипт је split
метод, постоји добра шанса да сте наишли на следећу грешку: TypeError: Cannot read property 'split' of undefined
.
Постоји неколико разлога зашто бисте добили ову грешку. Највероватније је то само основно неразумевање како то split
функционише и како се итерира низом.
На пример, ако покушате да пошаљете следећи код за изазов Пронађи најдужу реч у низу:
function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); array[i].split(""); } } findLongestWord("The quick brown fox jumped over the lazy dog");
бациће TypeError: Cannot read property 'split' of undefined
грешку.
split
metod
Када split
се позове на низ, он дели низ на поднизове на основу сепаратора који је предат као аргумент. Ако се празан низ преда као аргумент, split
сваки знак третира као подниз. Затим враћа низ који садржи поднизове:
const testStr1 = "Test test 1 2"; const testStr2 = "cupcake pancake"; const testStr3 = "First,Second,Third"; testStr1.split(" "); // [ 'Test', 'test', '1', '2' ] testStr2.split(""); // [ 'c', 'u', 'p', 'c', 'a', 'k', 'e', ' ', 'p', 'a', 'n', 'c', 'a', 'k', 'e' ] testStr3.split(","); // [ 'First', 'Second', 'Third' ]
Погледајте МДН за више детаља о split
.
Проблем објашњен примерима
Знање шта split
метода враћа и колико поднизова можете очекивати је кључно за решавање овог изазова.
Хајде да поново погледамо горњи код и видимо зашто не ради како се очекивало:
function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); array[i].split(""); } } findLongestWord("The quick brown fox jumped over the lazy dog");
Раздвајање str
у низ попут овог ( const array = str.split(" ");
) ради како се очекивало и враћа се [ 'The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog' ]
.
Али пажљиво погледајте for
петљу. Уместо да користи дужину array
као услов за итерацију i
, str.length
користи се уместо ње.
str
је „Брза смеђа лисица прескочила лењи пас“, а ако се пријавите str.length
на конзолу, добићете 44.
Последњи извештај у телу for
петље је оно што је узрок грешке: array[i].split("");
. Дужина array
је 9, па i
би брзо прешла максималну дужину од array
:
function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); console.log(array[i]); // array[0]: "The" // array[1]: "quick" // array[2]: "brown" // ... // array[9]: "dog" // array[10]: undefined // array[11]: undefined } } findLongestWord("The quick brown fox jumped over the lazy dog");
Позив array[i].split("");
да се сваки низ подели на поднизове знакова је ваљан приступ, али ће се бацити TypeError: Cannot read property 'split' of undefined
када се прође undefined
.
Како решити Пронађи најдужу реч у низу помоћу split
Хајде да брзо погледамо неки псеудо код како бисмо решили овај проблем:
- Поделите
str
у низ појединачних речи - Направите променљиву за праћење највеће дужине речи
- Прелистајте низ речи и упоредите дужину сваке речи са горе поменутом променљивом
- Ако је дужина тренутне речи већа од оне која је сачувана у променљивој, замените ту вредност тренутном дужином речи
- Једном када се дужина сваке речи упореди са променљивом за максималну дужину речи, вратите тај број из функције
Прво поделите str
у низ појединачних речи:
function findLongestWordLength(str) { const array = str.split(" "); }
Направите променљиву да бисте пратили најдужу дужину речи и подесите је на нулу:
function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; }
Сада када је вредност array
је ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']
, можете користити array.length
у својој for
петљи:
function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; for (let i = 0; i < array.length; i++) { } }
Прелистајте низ речи и проверите дужину сваке речи. Запамтите да низови такође имају length
метод који можете позвати да бисте лако добили дужину низа:
function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i < array.length; i++) { array[i].length; } }
Користите if
проверу израза да ли је дужина тренутне речи ( array[i].length
) већа од maxLength
. Ако јесте, замените вредност maxLength
са array[i].length
:
function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i maxLength) { maxLength = array[i].length; } } }
На крају, вратите се maxLength
на крају функције, након for
петље:
function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i maxLength) { maxLength = array[i].length; } } return maxLength; }