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

205
Vistas
¿Cómo comparar elementos adyacentes en una matriz 2D si están duplicados?

Tengo una matriz 2D:

 var arr1 = [["Egypt","Grid",50],["Egypt","Grid",10],["Nigeria","Grid",20],["Ghana","Grid",60],["Egypt","Grid",30]]

Quiero verificar el primer elemento de cada matriz, por ejemplo, Egipto, Nigeria y Ghana para ver si están duplicados. Pero solo quiero que verifique con el siguiente elemento, no con todos los elementos de la matriz. Si uno o más elementos se duplican uno al lado del otro, quiero devolver una matriz que suma los elementos en la posición 2 (50,10,20,60,30)

Esto debería resultar en:

 var arr2 = [["Egypt","Grid",60],["Nigeria","Grid",20],["Ghana","Grid",60]],["Egypt","Grid",30]]

Tenga en cuenta cómo, aunque hay 3 matrices con "Egipto", solo se combinan donde están uno al lado del otro.

He probado tanto map como for loop pero no tengo nada que esté cerca de funcionar. Esto es con lo que he comenzado:

 arr1.map(function (unit, index, array) { var length = array.length if (index < length - 2) { var next = array[index + 1][0] if (unit[0] === next) { } } })

Esto funciona para verificar si los elementos están duplicados. Creo que luego debo colocar los duplicados en una matriz separada que luego puedo reduce , pero no estoy seguro de cómo hacerlo. Cualquier ayuda para señalarme en la dirección correcta sería genial. ¡Gracias!

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

0

Puede usar un bucle for simple iterando sobre cada matriz excepto la última y verificando si el primer elemento del elemento iterado actual coincide con el primer elemento de current+1.

Si coinciden, sume los terceros elementos de cada uno y asigne a la matriz iterada actual, elimine current+1 (aquí usando splice() ) y disminuya i para volver a verificar el mismo índice nuevamente.

 var arr1 = [ ['Egypt', 'Grid', 50], ['Egypt', 'Grid', 10], ['Nigeria', 'Grid', 20], ['Ghana', 'Grid', 60], ['Egypt', 'Grid', 30], ]; for (let i = 0; i < arr1.length - 1; i++) { if (arr1[i][0] === arr1[i + 1][0]) { arr1[i][2] = arr1[i][2] + arr1[i + 1][2]; arr1.splice(i + 1, 1); i--; } } console.log(arr1);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede crear una matriz de grouping y en la que solo empuja el elemento si y solo si el country y la category de los últimos elementos no coinciden con el último elemento de la matriz de grouping o si no hay ningún elemento en la grouping

Puedes usar for..of bucle

 var arr1 = [ ["Egypt", "Grid", 50], ["Egypt", "Grid", 10], ["Nigeria", "Grid", 20], ["Ghana", "Grid", 60], ["Egypt", "Grid", 30], ]; const grouping = []; for (let [country, category, num] of arr1) { const last = grouping[grouping.length - 1]; const [lastCountry, lastCategory, lastNum] = last ?? []; lastCountry && lastCountry === country && lastCategory === category ? (last[2] += num) : grouping.push([country, category, num]); } console.log(grouping);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una solución con reduce . Para facilitar la desestructuración, he elegido anteponer primero los resultados al acumulador para finalmente revertir ese resultado con reverse :

 let arr = [["Egypt","Grid",60],["Nigeria","Grid",20],["Ghana","Grid",60],["Egypt","Grid",30]]; let result = arr.slice(1).reduce(([[x, y, z], ...acc], [a, b, c]) => a === x && b == y ? [[a, b, z + c], ...acc] : [[a, b, c], [x, y, z], ...acc] , [arr[0]]).reverse(); console.log(result);

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