Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

66
Views
Problema con bucles for anidados en Javascript - Scripting de algoritmo básico

Estoy tratando de escribir una función que acepte una matriz de cadenas como argumento. Quiero devolver la matriz de cadenas ordenadas primero por número de vocales y luego alfabéticamente.

Entrada : ['perro', 'gato', 'elefante', 'hipopótamo', 'cabra'] Salida : ['gato', 'perro', 'cabra', 'hipopótamo', 'elefante']

 function vowelMatching(vowels) { return vowels.match(/[aeiou]/ig) || []; //The 'i' in regex accounts for capitals } function arrangeByVowels(array) { const outputArray = []; console.log(array.length) console.log(outputArray.length) for(let x=0; array.length === outputArray.length; x++) { // let x = 0 const filterArray = []; for(let i =0; i<array.length; i++) { //console.log(vowelMatching(array[i]).length) if (vowelMatching(array[i]).length === x) { filterArray.push(array[i]) } } //console.log(filterArray.sort()) outputArray.push(...filterArray.sort()) } return outputArray } console.log(arrangeByVowels(['dog', 'gAg', 'qq', 'cat', 'elephant', 'hippo', 'goat']))

Estoy usando un bucle for anidado para lograr esto. Si asigno un valor a x , por ejemplo let x = 1 y comento el bucle for externo, devolverá todas las palabras con 1 vocal en orden alfabético. (Este es el resultado que busco)

Quiero recorrer x hasta array.length === outputArray.length pero en este momento este código devuelve una matriz vacía, y no estoy seguro de por qué.

Creo que estoy cerca, pero no tengo idea de dónde me estoy equivocando. ¿Qué estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Como respuesta de seguimiento a su pregunta real....

El problema es la lógica en su bucle for inicial

 for(let x=0; array.length === outputArray.length; x++)

Su condición array.length === outputArray.length siempre devolverá inicialmente falso ya que su matriz de salida tiene una longitud diferente a su matriz inicial. Esto finalizará instantáneamente el ciclo for porque la condición para continuar la iteración ha fallado.

El ciclo for es esencialmente mientras (la condición es verdadera) incrementa x; Su condición comienza falsa.

para corregirlo, simplemente cambie la condición para que siempre sea verdadera hasta que se cumplan sus criterios:

 for(let x=0; outputArray.length < array.length; x++) 

 function vowelMatching(vowels) { return vowels.match(/[aeiou]/ig) || []; } function arrangeByVowels(array) { const outputArray = []; for(let x=0; outputArray.length < array.length; x++) { // Logic error was here. const filterArray = []; for(let i =0; i<array.length; i++) { if (vowelMatching(array[i]).length === x) { filterArray.push(array[i]) } } outputArray.push(...filterArray.sort()) } return outputArray } console.log(arrangeByVowels(['dog', 'gAg', 'porcupine', 'qq', 'alligator', 'cat', 'elephant', 'albatross', 'hippo', 'goat', 'potato', 'banana','aardvark' ]))

about 4 years ago · Juan Pablo Isaza Report

0

Esto se puede hacer en un solo .sort();

 let source = ['dog', 'gAg', 'qq', 'cat', 'elephant', 'hippo', 'goat', 'arose', 'unity', 'arise'] let result = source.sort((a,b) => { let aVowels = a.match(/[aeiou]/gi) || []; let bVowels = b.match(/[aeiou]/gi) || []; return aVowels.length === bVowels.length ? (a > b ? 1 : -1) : // same number of vowels so compare alphabetically (aVowels.length > bVowels.length ? 1 : -1) // different number of vowels so compare lengths }) console.log(result);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!