Määratlemata atribuudi „split” ei saa lugeda

Kui olete kunagi kasutada Javascript splitmeetod, seal on hea võimalus, et olete kokku puutunud järgmise vea: TypeError: Cannot read property 'split' of undefined.

Selle tõrke ilmnemisel on mõned põhjused. Tõenäoliselt on see lihtsalt põhiline arusaamatus splittoimimise ja massiivide kaudu kordamise kohta.

Näiteks kui proovite esitada stringi väljakutse Leidke pikim sõna jaoks järgmine kood:

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");

see viskab TypeError: Cannot read property 'split' of undefinedvea.

splitmeetod

Stringil splitkutsumisel jagab see stringi alamstringideks argumendina edastatud eraldaja põhjal. Kui tühi string edastatakse argumendina, splitkäsitleb iga märki alamstringina. Seejärel tagastab alamrubriike sisaldava massiivi:

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' ] 

Lisateavet leiate MDN-ist split.

Probleemi selgitati näidetega

splitSelle väljakutse lahendamise võti on teadmine, mida meetod tagastab ja mitu alamstringi võite oodata.

Vaatame uuesti ülaltoodud koodi ja vaatame, miks see ei toimi ootuspäraselt:

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"); 

Selliseks strmassiiviks ( const array = str.split(" ");) jagamine töötab ootuspäraselt ja naaseb [ 'The',   'quick',   'brown',   'fox',   'jumped',   'over',   'the',   'lazy',   'dog' ].

Kuid vaadake forsilmust lähemalt . Selle asemel, arrayet kordamiseks kasutada tingimuse pikkust i, str.lengthkasutatakse selle asemel.

stron "Kiire pruun rebane hüppas üle laisa koera" ja kui str.lengthkonsooli sisse logite , saate 44.

Viimane avaldus keha forsilmus on see, mida on põhjustanud viga: array[i].split("");. Pikkus arrayon 9, nii et see iületaks kiiresti maksimaalse pikkuse 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"); 

Kutsumine array[i].split("");iga stringi jaotamiseks märkide alamstringideks on kehtiv lähenemisviis, kuid see läheb üle, TypeError: Cannot read property 'split' of undefinedkui see läbitakse undefined.

Kuidas lahendada stringi pikima sõna leidmine split

Vaatame selle probleemi lahendamiseks kiiresti läbi pseudokoodi:

  1. Jagage strüksikute sõnade massiiviks
  2. Suurima sõna pikkuse jälgimiseks looge muutuja
  3. Kordage läbi sõnade massiivi ja võrrelge iga sõna pikkust ülalnimetatud muutujaga
  4. Kui praeguse sõna pikkus on suurem kui muutujasse salvestatu, asendage see väärtus praeguse sõna pikkusega
  5. Kui iga sõna pikkust on võrreldud maksimaalse sõna pikkuse muutujaga, tagastage see arv funktsioonist

Kõigepealt jagage strüksikute sõnade kogumiks:

function findLongestWordLength(str) { const array = str.split(" "); }

Looge muutuja, et jälgida kõige pikemat sõna pikkust, ja määrake see nulli:

function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; }

Nüüd, kui väärtus arrayon ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog'], saate array.lengthoma forsilmus kasutada :

function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; for (let i = 0; i < array.length; i++) { } }

Kordage läbi sõnade massiivi ja kontrollige iga sõna pikkust. Pidage meeles, et stringidel on ka lengthmeetod, mida saate helistada stringi pikkuse hõlpsaks saamiseks:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i < array.length; i++) { array[i].length; } }

Kasutage iflause kontrollimist, kas praeguse sõna ( array[i].length) pikkus on suurem kui maxLength. Kui jah, asendage väärtus maxLengthjärgmisega array[i].length:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i  maxLength) { maxLength = array[i].length; } } }

Lõpuks naaske maxLengthfunktsiooni lõpus, pärast forsilmus:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i  maxLength) { maxLength = array[i].length; } } return maxLength; }