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

135
Vistas
Una función que devuelve una matriz que es la intersección de otras dos matrices
function arraysCommon(array1, array2) { return array1.filter(x => array2.includes(x)); }

Esta función no funciona como yo quiero. Por ejemplo dado array1 = [1,2,3,2,1] y array2 = [5,4,3,2,1] devuelve [1,2,3,2,1] , ya que los elementos 1,2,3 se ven en ambas matrices. Pero quiero que devuelva [1,2,3] en ese orden ya que 1,2,3 se ven solo una vez en array2 y se tratan como entidades separadas.

Así que más o menos la funcionalidad debería ser esa

  • Cada elemento de la primera matriz se puede asignar como máximo a un elemento de la segunda matriz.
  • Los elementos duplicados en cada matriz se tratan como entidades separadas.
  • la primera matriz determina el orden

Intenté recorrer las matrices y verificar y comparar la cantidad de duplicados en cada matriz, pero parece que no puedo hacer que la lógica funcione correctamente. ¿Hay una manera diferente de abordar esto?

Adjunto una imagen de dos diagramas de Venn que podrían aclarar la diferencia. Adjunto una imagen de dos diagramas de Venn que podrían aclarar la diferencia.

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

0

Desafortunadamente, se vuelve más complicado porque necesita saber qué números ya ha agregado. En este caso, necesita una matriz temporal para contener el resultado. También necesitamos rastrear si un número existe en la matriz dos veces.

Prueba esto:

 function arraysCommon(array1, array2) { //Copy array2 by duplicating and spreading the elements into another array. var copyArray2 = [...array2]; //Temperary Array var temp = []; for (let x of array1) { //Check if the element is in the first array and not already added to the temp array if (copyArray2.includes(x)) { temp.push(x); //Remove item from copy array2 so it cannot be used anymore copyArray2.splice(copyArray2.indexOf(x), 1); } } //Return the temp array return temp; } console.log(arraysCommon([1,2,3,2,1], [5,4,3,2,1])) console.log(arraysCommon([1,2,3,2,1], [2,2,3,3,4]))

about 4 years ago · Juan Pablo Isaza Denunciar

0

¡Esto debería funcionar como querías!

 // test 1 const array1 = [1,4,1,1,5,9,2,7]; const array2 = [1,8,2,5,1]; // test 2 const array3 = [1,2,3,2,1]; const array4 = [5,4,3,2,1]; const mapper = (array1, array2) => { var obj = {}; array1.forEach((x, indexX) => { array2.forEach((y, indexY) => { if (x == y) { if (!Object.values(obj).includes(indexX) && !obj.hasOwnProperty(indexY)) { obj[indexY] = indexX; return; } } }) }) return Object.values(obj).sort().map(values => array1[values]); } console.log(mapper(array1, array2)); console.log(mapper(array3, array4));

Espero que esto ayude. Salud.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Con la clasificación y el conteo esto debería ser posible. Dado que está incrementando cuando encuentra caracteres similares, esto debería estar bien:

 const array1= [1,4,1,1,5,9,2,7]; const array2 = [1,8,2,5,1] const array3 = [1,2,3,2,1]; const array4 = [5,4,3,2,1,2] const array5 = [1,2,3,2,1]; const array6 = [2,2,3,3,4] function arraysCommon(array1, array2) { const ans = []; array1.sort(); array2.sort(); let j = 0; let i = 0; while(i<array1.length && j<array2.length){ if(array1[i] === array2[j]){ ans.push(array1[i]); i++; j++; } else if(array2[i] > array1[j]){ i++; } else{ j++; } } console.log(ans); } arraysCommon(array1,array2); arraysCommon(array3,array4); arraysCommon(array5,array6);

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