Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

165
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!