Me preguntaba por qué el siguiente código devuelve un error de asignación de memoria.
var countValidWords = function(sentence) { let words = []; for(let i = 0; i < sentence.length; ++i){ let word = ''; while(sentence[i] !== ' '){ word += sentence[i]; ++i; } if(word !== '') words.push(word); } console.log(words); };Simplemente estoy tratando de construir una matriz de palabras a partir de la oración ingresada (las palabras pueden estar separadas por más de un espacio).
Si la oración no termina con un espacio, el ciclo while nunca termina porque no verifica si ha pasado el final de la cadena. Como resultado, ingresa en un ciclo infinito que agrega undefined a word , hasta que se queda sin memoria.
Agregue una verificación de que i está dentro de la longitud de la cadena allí.
var countValidWords = function(sentence) { let words = []; for(let i = 0; i < sentence.length; ++i){ let word = ''; while(i < sentence.length && sentence[i] !== ' '){ word += sentence[i]; ++i; } if(word !== '') words.push(word); } console.log(words); };La cláusula while debe verificar si i salgo de los límites:
while(i < sentence.length && sentence[i] !== ' ')¿Qué tal esto? No es la versión más optimizada que puedas encontrar, pero funciona. Tenías un bucle infinito en el tiempo.
var countValidWords = function(sentence) { let words = []; let word = '' for(let i = 0; i < sentence.length; ++i){ if(sentence[i] != '' && sentence[i] != ' '){ word += sentence[i]; } if(sentence[i] == ' ' || sentence[i + 1] === undefined){ words.push(word); word = ''; } } console.log(words); };