Si alguna vez has usado de JavaScript split
método, hay una buena probabilidad de que usted ha encontrado el siguiente error: TypeError: Cannot read property 'split' of undefined
.
Hay algunas razones por las que recibiría este error. Lo más probable es que sea solo un malentendido básico de cómo split
funciona y cómo iterar a través de matrices.
Por ejemplo, si intenta enviar el siguiente código para el desafío Buscar la palabra más larga en una cadena:
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");
arrojará el TypeError: Cannot read property 'split' of undefined
error.
El split
método
Cuando split
se llama en una cadena, divide la cadena en subcadenas según el separador que se pasa como argumento. Si se pasa una cadena vacía como argumento, split
trata cada carácter como una subcadena. Luego devuelve una matriz que contiene las subcadenas:
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' ]
Consulte MDN para obtener más detalles sobre split
.
El problema explicado con ejemplos.
Saber qué split
devuelve el método y cuántas subcadenas puede esperar es la clave para resolver este desafío.
Echemos otro vistazo al código anterior y veamos por qué no funciona como se esperaba:
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");
Dividir str
en una matriz como esta ( const array = str.split(" ");
) funciona como se esperaba y regresa [ 'The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog' ]
.
Pero mire más de cerca el for
bucle. En lugar de usar la longitud de array
como condición para iterar i
, str.length
se usa en su lugar.
str
es "El rápido zorro marrón saltó sobre el perro perezoso", y si inicias sesión str.length
en la consola, obtendrás 44.
La última instrucción en el cuerpo del for
bucle es lo que está causando el error: array[i].split("");
. La longitud de array
es 9, por i
lo que rápidamente superaría la longitud máxima de 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");
Llamar array[i].split("");
para dividir cada cadena en subcadenas de caracteres es un enfoque válido, pero arrojará TypeError: Cannot read property 'split' of undefined
cuando se pase undefined
.
Cómo resolver Buscar la palabra más larga en una cadena con split
Repasemos rápidamente algunos pseudocódigos sobre cómo resolver este problema:
- Dividir
str
en una variedad de palabras individuales - Cree una variable para rastrear la mayor longitud de palabra
- Repita la matriz de palabras y compare la longitud de cada palabra con la variable mencionada anteriormente.
- Si la longitud de la palabra actual es mayor que la almacenada en la variable, reemplace ese valor con la longitud de la palabra actual
- Una vez que se compara la longitud de cada palabra con la variable de longitud máxima de palabra, devuelve ese número de la función
Primero, divídalo str
en una variedad de palabras individuales:
function findLongestWordLength(str) { const array = str.split(" "); }
Cree una variable para realizar un seguimiento de la longitud de palabra más larga y ajústela a cero:
function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; }
Ahora que el valor de array
es ['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']
, puede usar array.length
en su for
ciclo:
function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; for (let i = 0; i < array.length; i++) { } }
Repita el conjunto de palabras y verifique la longitud de cada palabra. Recuerde que las cadenas también tienen un length
método al que puede llamar para obtener fácilmente la longitud de una cadena:
function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i < array.length; i++) { array[i].length; } }
Utilice una if
comprobación de declaración si la longitud de la palabra actual ( array[i].length
) es mayor que maxLength
. Si es así, reemplace el valor de maxLength
con array[i].length
:
function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i maxLength) { maxLength = array[i].length; } } }
Finalmente, regrese maxLength
al final de la función, después del for
ciclo:
function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i maxLength) { maxLength = array[i].length; } } return maxLength; }