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

186
Vistas
Nodo: combine la cantidad dinámica de matrices juntas: alterne los elementos en la matriz de resultados

Tengo un montón de matrices de diferentes longitudes que contienen objetos del mismo tipo. Lo que quiero es fusionar todas estas matrices en una matriz final. El problema que tengo es que los elementos deben alternarse en la matriz de resultados final.

entonces, si, por ejemplo, una matriz solo tiene un valor para alternar los resultados hasta que no haya ningún elemento en la matriz de longitud más corta y continuar con los demás que aún tienen valores.

 const arr1 = [arr1Obj, arr1Obj, arr1Obj] const arr2 = [arr2Obj, arr2Obj, arr2Obj] const arr3 = [arr3obj] //no pre-defined amount of arrays, could be only one array or 10+ //output desired [arr1Obj, arr2Obj, arr3Obj, arr1Obj, arr2Obj, arr1Obj, arr2Obj]

Mi enfoque fue simplemente usar un montón de bucles for anidados que estoy seguro de que no es la mejor manera de hacer esto. Me pregunto, ¿cómo se parecería la forma es6 más corta y de mayor rendimiento? Preferiblemente sin utilizar módulos como lodash.

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

0

Podemos usar Array.from() y Array.reduce() para obtener la secuencia que deseamos.

Comenzamos obteniendo la longitud máxima de la matriz usando Math.max() , luego usamos Array.from() para crear nuestra matriz de salida, usando Array.reduce() para agregar cada elemento a medida que iteramos sobre las matrices, aplanando al final :

 const arr1 = ['arr1Obj', 'arr1Obj', 'arr1Obj'] const arr2 = ['arr2Obj', 'arr2Obj', 'arr2Obj'] const arr3 = ['arr3Obj'] // Sort our input by length, we want the longest array first... const arrays = [arr1, arr2, arr3]; const maxLength = Math.max(...arrays.map(a => a.length)); const result = Array.from({ length: maxLength }, (v, idx) => arrays.reduce((acc, arr) => { if (idx < arr.length) { acc.push(arr[idx]); } return acc; }, [])).flat(); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar .reduce to n arrays con los j -ésimos elementos y luego .push todos sus elementos:

 let arrs = [ [1,2,3], [2,undefined,'4',6,90,3.14], [1,0,-1,5], [], [100, 300, -Infinity] ]; let merged = []; for (var i = 0, j = 0; i < arrs.length; i++, j++) { merged.push(...arrs.reduce((a, c) => { if (c.length > j) a.push(c[j]); return a; }, [])); }
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