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

106
Views
Me gustaría contar los elementos vecinos coincidentes en una matriz y devolver el recuento

Tengo una matriz y me gustaría encontrar todas las coincidencias vecinas y contarlas, luego devolver el conteo, realizado en un bucle como .map() para que no sea necesario almacenar una memoria de lo que se contó más allá del elemento actual. necesito usar esta cantidad de elementos actuales para reservar suficientes espacios para cada grupo de elementos

 array = [ball, batter, batter, amount, amount, github, github, github, account, account, account, account, account, account, account, github, github, github]

El ejemplo de los resultados deseados de esta matriz sería: en el primer bucle devolvería 1, el segundo bucle devolvería 2, luego 2, luego 3, luego 7, luego 3

y este conteo se usaría como variable para reservar espacio, algo así como

 number to reserve: count

por lo tanto, a través de cada ciclo, el count variable se cambiaría y actualizaría al conteo de elementos actual, y el ciclo que cuenta no se detendría hasta que el siguiente elemento no coincida con el elemento actual, y el count variable tampoco estará disponible para usar hasta que se encuentren todas las coincidencias simultáneas, por lo que si pongo console.log(count) al final de la función obtendría cada número de salida individualmente

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puede contar fácilmente la cadena consecutiva en una matriz como:

 const array = ["ball", "batter", "batter", "amount", "amount", "github", "github", "github", "account", "account", "account", "account", "account", "account", "account", "github", "github", "github"] const result = []; let last = array[0], lastSameIndex = 0; for (let i = 1; i < array.length; ++i) { if (array[i] !== last) { result.push(i - lastSameIndex); lastSameIndex = i; last = array[i]; } } result.push(array.length - lastSameIndex); console.log(result);


Declaremos algunos valores iniciales como

last = array[0] , por lo que last = "ball" y lastSameIndex = 0

Entonces, debemos comenzar desde el índice 1 y solo debemos considerar un solo caso en el que los dos elementos no son iguales, es decir array[i] !== last . Si no son iguales, tenemos que empujar el conteo del mismo elemento hasta ahora como:

 result.push(i - lastSameIndex);

Ahora, tenemos que actualizar el nuevo valor y el índice, es decir, last elemento desde donde tenemos que contar ese elemento nuevamente.

 lastSameIndex = i; last = array[i];

Hasta aquí todo bien, pero también tenemos que manejar un caso en el que finaliza el ciclo. En este caso, tenemos que empujar el conteo del último elemento desde donde comenzó el conteo, es decir, last inicio o lastSameIndex hasta el último elemento.

 result.push(array.length - lastSameIndex);

Second solution

 const array = [ "ball", "batter", "batter", "amount", "amount", "github", "github", "github", "account", "account", "account", "account", "account", "account", "account", "github", "github", "github"]; let lastStr = "", num = 0; const result = array .map((s) => { if (lastStr !== s) { lastStr = s; num = num === 0 ? 1 : 0; } return num; }) .join("") .match(/(\d)\1*/g) .map((s) => s.length); console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

Entonces, haga un bucle en cada elemento, si no es igual al último elemento, presione 1 , de lo contrario, agregue 1 al último número en la matriz.

 const items = ["ball", "batter", "batter", "amount", "amount", "github", "github", "github", "account", "account", "account", "account", "account", "account", "account", "github", "github", "github"] const results = []; items.forEach((item, i) => { if (items[i - 1] !== item) return results.push(1); const last = results.length - 1; results[last] = results[last] + 1; }); console.log(results);

about 4 years ago · Juan Pablo Isaza Report

0

  • Intente unir la matriz en una cadena separada por comas por array.join(",") : ball,batter,batter,amount,amount,github,github,github
  • Use expresiones regulares : /([az]+,)\1*/gi para que coincida con la misma palabra repetida Da: ['ball,', 'batter,batter,', 'amount,amount,', 'github,github,github,...]
  • Cuente cuántas palabras en cada cadena de matriz usando s.split(',').length-1

Guion:

 array.join(",").match(/([az]+,)\1*/gi).map((s) => `${s.split(',').length-1}`);

Resultado: ['1', '2', '2', '3', '7', '2']

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!