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

115
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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