Не може се прочитати „подела“ својства неодређеног

Ако сте икада користили ЈаваСцрипт је 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грешку.

splitmetod

Када 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

Хајде да брзо погледамо неки псеудо код како бисмо решили овај проблем:

  1. Поделите strу низ појединачних речи
  2. Направите променљиву за праћење највеће дужине речи
  3. Прелистајте низ речи и упоредите дужину сваке речи са горе поменутом променљивом
  4. Ако је дужина тренутне речи већа од оне која је сачувана у променљивој, замените ту вредност тренутном дужином речи
  5. Једном када се дужина сваке речи упореди са променљивом за максималну дужину речи, вратите тај број из функције

Прво поделите 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; }