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

139
Vistas
El método de empalme hace que el ciclo for se ejecute n - 2 veces (n es el número de elementos en una matriz)

Quiero eliminar los elementos de una matriz con n elementos usando un bucle for y el método de empalme uno por uno. El ciclo se ejecuta n - 2 veces y habrá 2 elementos dentro de la matriz al final. ¿Por qué es así?

 const fruits = ['Apple', 'Orange', 'Watermelon', 'Peach'] for(index in fruits){ console.log('Execution Number:', index); console.log('Before:', fruits); fruits.splice(0, 1); console.log('After:', fruits); console.log('-'.repeat(50)); } console.log('\nFinal Result:', fruits)

resultado:

 Execution Number: 0 Before: [ 'Apple', 'Orange', 'Watermelon', 'Peach' ] After: [ 'Orange', 'Watermelon', 'Peach' ] -------------------------------------------------- Execution Number: 1 Before: [ 'Orange', 'Watermelon', 'Peach' ] After: [ 'Watermelon', 'Peach' ] -------------------------------------------------- Final Result: [ 'Watermelon', 'Peach' ]

Sé que puedo hacer esto con una sola línea de código usando el método de empalme, pero quería probar si puedo hacerlo usando un bucle for.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Esto sucede porque está reduciendo la longitud de la matriz en cada bucle. Al hacer esto, el número de elementos en la matriz disminuye pero el índice aún aumenta.

frutas Índice
['Manzana', 'Naranja', 'Sandía', 'Melocotón'] 0 0 < 4 por lo tanto, Apple se elimina
['Naranja', 'Sandía', 'Melocotón'] 1 1 < 3 por lo que se elimina naranja
['Sandía', 'Melocotón'] 2 2 < 2 Aquí 2 < 2 es falso, el ciclo se detiene

Una solución sería hacer un ciclo for con una longitud fija calculada antes del ciclo

 const fruits = ['Apple', 'Orange', 'Watermelon', 'Peach'] const length = fruits.length for (let index = 0; index < length; index++){ console.log('Execution Number:', index); console.log('Before:', fruits); fruits.splice(0, 1); console.log('After:', fruits); console.log('-'.repeat(50)); } console.log('\nFinal Result:', fruits)

Como mencionó @reyno, en los fragmentos anteriores no puede acceder a las frutas individualmente. De hecho, si desea acceder a cada fruta en el bucle de piso, puede hacerlo accediendo al primer elemento de la matriz cada vez: fruits[0]

about 4 years ago · Juan Pablo Isaza Denunciar

0

El problema se está viendo porque la longitud de la matriz se reduce en uno en cada iteración debido a fruits.splice(0,1) .

  1. Iteración 1 - índice = 0; fruits.length = 4
  2. Iteración 2 - índice = 1; fruits.length = 3
  3. Iteración 3 - índice = 2; fruits.length = 2 -> for loop breaks

De ahí la observación.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando haces fruits.splice , estás modificando la matriz utilizada para el bucle for en sí. Si observa el index , se incrementa en cada ciclo. Después Execution Number: 1 , se incrementa a 2 y mira las fruits y ve que no hay más elementos. Al ver eso, sale del bucle for.

Si quieres hacerlo con un bucle for, lo que probablemente querías era

 const fruits = ['Apple', 'Orange', 'Watermelon', 'Peach'] const fruitsLen = fruits.length; for(let i = 0; i < fruitsLen; i++){ console.log('Execution Number:', i); console.log('Before:', fruits); fruits.splice(0, 1); console.log('After:', fruits); console.log('-'.repeat(50)); } console.log('\nFinal Result:', fruits)
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