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

167
Vistas
Cuente pares de elementos en una matriz y resúmalos

Quiero crear una función que cuente los pares de una matriz y al final cuente los pares, el resultado esperado aquí debería ser:

 { 1: 1, 10: 1, 90: 2 }, 4

pero estoy recibiendo

 { 1: 1, 90: 2 }, 3

¿Alguien puede dar un consejo sobre cómo volver a trabajar esto? No obtiene 10 como par porque ocurre tres veces, pero debe contarlo como par porque subió dos veces. ¿Hay mejores métodos para crear esto?

 const pairs = [90, 10, 1, 2, 3, 4, 5, 10, 1, 90, 90, 90, 10, 22]; function checkPairs(arr) { const result = {} for(let i =0;i<pairs.length;i++) { const counter = pairs.filter(item => item == arr[i]); if(counter.length > 1 && counter.length % 2 == 0) { result[pairs[i]] = counter.length/2; } } return result; } function countPairs(obj) { let result = 0; for([i, t] of Object.entries(obj)) { result+=t; } return result; } const countedPairs = checkPairs(pairs); const counter = countPairs(countedPairs); console.log(countedPairs, counter)

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

0

Su cheque dice que tiene que haber un número exacto para los pares cuando está haciendo counter.length % 2 == 0

Solo necesita asegurarse de tener 2 o más y simplemente redondear hacia abajo con el piso

 const pairs = [90, 10, 1, 2, 3, 4, 5, 10, 1, 90, 90, 90, 10, 22]; function checkPairs(arr) { const result = {} for(let i =0;i<pairs.length;i++) { const counter = pairs.filter(item => item == arr[i]); if(counter.length > 1) { result[pairs[i]] = Math.floor(counter.length/2); } } return result; } function countPairs(obj) { let result = 0; for([i, t] of Object.entries(obj)) { result+=t; } return result; } const countedPairs = checkPairs(pairs); const counter = countPairs(countedPairs); console.log(countedPairs, counter)

Su código de filtro hace que haga un bucle mucho más de lo que necesita. Solo tiene que recorrer una vez la matriz y realizar un seguimiento de las veces que la ha visto.

 const pairs = [90, 10, 1, 2, 3, 4, 5, 10, 1, 90, 90, 90, 10, 22]; const counts = pairs.reduce(function (o, val) { // update how many times we have seen it. o.count[val] = (o.count[val] || 0) + 1; // is it the a pair yet? if (o.count[val] ===2) { // if it is, reset the count o.count[val] = 0; // update the count for the pair o.pairsCount[val] = (o.pairsCount[val] || 0) + 1; o.totalPairs++; } return o; }, { count: {}, pairsCount: {}, totalPairs: 0}); console.log(counts.pairsCount, counts.totalPairs);

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Qué tal si pruebas este enfoque? Comprobación de que la longitud de la matriz de contadores es uniforme. En caso afirmativo, haga el cálculo regular; de lo contrario, simplemente reste 1 de la longitud del contador.

 const pairs = [90, 10, 1, 2, 3, 4, 5, 10, 1, 90, 90, 90, 10, 22]; function checkPairs(arr) { const result = {} for(let i =0;i<pairs.length;i++) { const counter = pairs.filter(item => item == arr[i]); if(counter.length > 1) { result[pairs[i]] = counter.length % 2 == 0 ? counter.length / 2 : (counter.length -1) / 2 ; } } return result; } function countPairs(obj) { let result = 0; for([i, t] of Object.entries(obj)) { result+=t; } return result; } const countedPairs = checkPairs(pairs); const counter = countPairs(countedPairs); console.log(countedPairs, counter)

about 4 years ago · Juan Pablo Isaza Denunciar

0

También puedes hacerlo usando Array.prototype.reduce .

  1. Por cada incremento de número se cuenta de 1 en 1 .
  2. Cada vez que el conteo de un número en particular sea par, incremente el total en 1 .

 const nums = [90, 10, 1, 2, 3, 4, 5, 10, 1, 90, 90, 90, 10, 22], totalPairs = nums.reduce( (acc, num) => { acc[num] ??= 0; acc[num] += 1; if (!(acc[num] % 2)) { acc.total += 1; } return acc; }, { total: 0 } ).total; console.log(totalPairs);

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