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

217
Vistas
Fusionar matrices con criterios específicos

Me han presentado un desafío para javascript. Tengo una matriz llamada matrices. Estoy tratando de comparar el Usuario A con el Usuario B con C. El Usuario A, el Usuario B y el Usuario C son valores dinámicos y seguirán cambiando.

Si la fecha y la hora del Usuario A, el Usuario B y el Usuario C son iguales, entonces muestre la salida. Por ejemplo, si

 var arrays = ['7/10/2021', 'User A', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User B', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User C', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User C', 'Thu', 'even', '10:00 - 10:20'],

entonces debería mostrar solo esto.

 ['7/10/2021', 'Thu', 'even', '09:00 - 09:20'],

Mi código actual es:

 var arrays = ['7/10/2021', 'User A', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User B', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User C', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User C', 'Thu', 'even', '10:00 - 10:20'] ], result = []; var frequency = arrays .reduce(function(seen, currentItem) { if (currentItem in seen) { seen[currentItem] = seen[currentItem] + 1; } else { seen[currentItem] = 1; } return seen; }, {}); for (var key in frequency) { if (frequency[key] > 1) { result.push(key.split(",").map(function(currentItem) { return parseInt(currentItem); })); } } console.log(result); My result: []

probé esto

 var arrays = [ ['7/10/2021', 'User A', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User A', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User C', 'Thu', 'even', '09:00 - 09:20'], ['7/10/2021', 'User C', 'Thu', 'even', '10:00 - 10:20']]; var myArrayFiltered = arrays.filter(function(item, pos) { return arrays.indexOf(item) == pos; }); console.log(myArrayFiltered)

Pero muestra a todos los usuarios que no quería.

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

0

Recuerdo esta pregunta de hace unas horas. Como dijiste allí, la estructura de tus datos es fija (es decir, cada fila tiene 5 elementos en el mismo orden).

Este truco rápido a continuación debería hacer lo que necesitas. Probablemente no sea la solución más elegante (especialmente la encadenación y el análisis de la matriz), pero hace el trabajo.

Para explicaciones ver los comentarios en el código.

 //this is the index that will be excluded for comparisons let userindex = 1; let data = [ ['date1', 'user a', 'day 1', 'even', 'time 1'], ['date1', 'user a', 'day 1', 'even', 'time 2'], ['date1', 'user a', 'day 2', 'even', 'time 1'], ['date1', 'user b', 'day 1', 'even', 'time 1'], ['date2', 'user b', 'day 1', 'even', 'time 2'], ['date1', 'user b', 'day 2', 'even', 'time 1'], ['date1', 'user c', 'day 1', 'even', 'time 1'], ['date2', 'user c', 'day 1', 'even', 'time 2'], ['date1', 'user c', 'day 2', 'even', 'time 3'], ] //get the number of distinct users let users = data.map(row => row[userindex]) //get the user .filter((u, i, arr) => arr.indexOf(u) === i) //only get first occurence of each username .length; //count the elements in the resulting array //group by different combinations and get users for each distinct combination let groups = data.reduce((a, row) => { //remove username from row and stringify the resulting array to use as key in object let key = JSON.stringify(row.filter((_, i) => i != userindex)); //check if the current combination is already contained in the object, and add if not if (!a[key]) a[key] = []; //if the current user isn't contained for the combination add it if (!a[key].includes(row[userindex])) a[key].push(row[userindex]); return a; }, {}) //get only elements which contain all users let valids = Object.entries(groups) //get an array of [[key, value]] for the group object .filter(e => e[1].length == users) //filter it for elements which contain all users .map(e => JSON.parse(e[0])); //parse the key back to an array console.log(valids)

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