Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Eliminar un elemento que contiene una letra específica de una matriz

Tengo una matriz como esta.

 const cntry = ['Albania', 'Bolivia', 'Canada', 'Denmark', 'Ethiopia', 'Finland', 'Germany', 'Hungary', 'Turkey', 'Iceland', 'Ireland'];

Quiero eliminar los elementos que contienen la palabra "land" de esta matriz, pero como estoy estudiando "for loop", quiero eliminarlos usando solo el método "for".

Probé este código pero no funcionó. "Irlanda" todavía está en la matriz. ¿Qué hice mal?

 for (let i = 0; i < cntry.length; i++) { if (cntry[i].includes('land')) { cntry.splice(i, 1); } }

Producción:

 (9) ['Albania', 'Bolivia', 'Canada', 'Denmark', 'Ethiopia', 'Germany', 'Hungary', 'Turkey', 'Ireland']
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Estás mutando cntry for medida que lo haces. Esto rompe la relación de incremento/índice de todos los elementos restantes tan pronto como elimina un elemento de la matriz. Entonces, en su lugar, invierta el ciclo: comience desde el final de la matriz y trabaje hacia el comienzo:

 const cntry = ['Albania', 'Bolivia', 'Canada', 'Denmark', 'Ethiopia', 'Finland', 'Germany', 'Hungary', 'Turkey', 'Iceland', 'Ireland']; // start with the length of array minus 1 // decrement i by 1 after each loop // leave loop when i is less than 0 for (let i = cntry.length - 1; i >= 0; i--) { if (cntry[i].includes('land')) { cntry.splice(i, 1); } } console.log(cntry);

Ahora, cuando elimina un elemento, los índices anteriores aún corresponden a su valor de incremento actual.


Desarrollando: for (let i = cntry.length - 1; i >= 0; i--)

En su ciclo for, establezca la variable de incremento i en la longitud de la matriz menos 1. Dado que las matrices están indexadas en cero, lo que significa que el primer elemento está indexado en 0 , deberá comenzar su incremento en la longitud de la matriz menos 1. Allí hay 11 elementos en su matriz, por lo que el último elemento está indexado 10 .

 let i = cntry.length - 1;

Luego permita el ciclo mientras i sea mayor o igual a >= 0. En otras palabras, deje el ciclo cuando i sea menor que cero:

 i >= 0;

Y finalmente, decrement i . El cambio de incremento de bucle ocurre después de que se haya evaluado el bloque de bucle y antes de la siguiente iteración.

 i--

En el "mundo real", usaría una construcción de bucle que se adapta bien al bloque de código que desea evaluar. Dado que está mutando la matriz, sería más adecuado forEach loop ya que no depende de mantener una relación de incremento/índice. Tal vez ese sea el propósito de su tarea, mostrarle cuándo un ciclo for no es apropiado.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes filter tu lista porque cuando usas slice estás sobrescribiendo la matriz original:

 const countryList = ['Albania', 'Bolivia', 'Canada', 'Denmark', 'Ethiopia', 'Finland', 'Germany', 'Hungary', 'Turkey', 'Iceland', 'Ireland'] const filter = 'land' const filteredList = [] for (const country of countryList) { if (!country.includes(filter)) { filteredList.push(country) } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Ya existe una mejor respuesta que utiliza la matriz existente, pero aquí hay una solución alternativa.

 const cntry = ['Albania', 'Bolivia', 'Canada', 'Denmark', 'Ethiopia', 'Finland', 'Germany', 'Hungary', 'Turkey', 'Iceland', 'Ireland']; const newArray = []; // new target array for countries that don't have 'land' in the name // looping through the cntry array for (let i = 0; i < cntry.length; i++) { // checking to see if the current country in the loop iteration doesn't include 'land' - if false then push that country to the array => newArray if (!cntry[i].includes('land')) { newArray.push(cntry[i]); } } console.log(newArray);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda