Quiero encontrar cadenas más largas de esta matriz:
const myArr = ["primero", "segundo", "tercero", "cuarto", "quinto", "sexto", "siete", "octavo"]
en esta matriz, "segundo", "cuarto", "octavo" tiene una longitud de 6. Quiero devolverlos en una matriz.
const myArr = ["first", "second", "third", "fourth", "fifth", "sixth", "seven", "eighth"] function longerStrings(arr) { let largeStrings = [] let longerWord = '' for (let name of arr) { if (name.length > longerWord.length) { longerWord = name largeStrings.push(longerWord) } } return largeStrings } longerStrings(myArr)el resultado esperado es : ["segundo","cuarto","octavo"]
pero devuelve =["primero","segundo"]
Cuando se identifica una palabra más larga que cualquiera de las encontradas hasta ahora, debe crear una matriz completamente nueva (descartando los elementos que tenía antes) y colocar en ella la nueva palabra que establece el récord. También debe enviar un nombre a la matriz si el nombre que se itera no establece un registro, pero es igual al establecidor de registros actual.
const myArr = ["first", "second", "third", "fourth", "fifth", "sixth", "seven", "eighth"] function longerStrings(arr) { let largeStrings = [] let longerWord = '' for (let name of arr) { if (name.length > longerWord.length) { longerWord = name largeStrings = [name]; } else if (name.length === longerWord.length) { largeStrings.push(name) } } return largeStrings } console.log(longerStrings(myArr));Más fácil si usa filtro en su lugar:
const myArr = ["first", "second", "third", "fourth", "fifth", "sixth", "seven", "eighth"] const longest = myArr.reduce((a, b) => a.length > b.length ? a : b); const res = myArr.filter(el => el.length >= longest.length) console.log(res)Eso devuelve:
["second","fourth","eighth"]O, como Sash menciona a continuación, se puede hacer en un solo paso, aunque la solución no es tan legible:
let max = 0; const reducer = myArray.reduce((previous, current) => { if (current.length > max) { previous = []; } if (current.length >= max) { previous.push(current); max = current.length; } return previous; }, []); console.log(reducer);Simplemente puede ordenar la matriz por longitud descendente y luego seleccionar solo valores que tengan la misma longitud que el primer elemento:
const myArr = ["first", "second", "third", "fourth", "fifth", "sixth", "seven", "eighth"] const result = myArr .sort((a, b) => b.length - a.length) .filter((v, _, arr) => v.length == arr[0].length) console.log(result)