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

396
Vistas
Uso de lodash para comparar matrices irregulares (existencia de elementos sin orden)

Sé que puedo hacerlo usando bucles, pero estoy tratando de encontrar una forma elegante de hacerlo:

Tengo dos matrices irregulares (matriz de matrices):

 var array1 = [['a', 'b'], ['b', 'c']]; var array2 = [['b', 'c'], ['a', 'b']];

Quiero usar lodash para confirmar que las dos matrices irregulares anteriores son iguales. Por 'lo mismo' quiero decir que no hay ningún elemento en array1 que no esté contenido en array2 . Tenga en cuenta que los elementos de la matriz irregular son en realidad matrices. Así que quiero comparar entre matrices internas.

En términos de verificar la igualdad entre estos elementos:

 ['a', 'b'] == ['b', 'a']

o

 ['a', 'b'] == ['a', 'b']

Ambos funcionan ya que las letras siempre estarán en orden.


ACTUALIZACIÓN : la pregunta original hablaba de "matrices" (en lugar de matrices irregulares) y durante años muchas personas discutieron (y agregaron respuestas) sobre la comparación de matrices unidimensionales simples (sin darse cuenta de que los ejemplos proporcionados en la pregunta no eran realmente similares a las simples matrices unidimensionales que esperaban).

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si ordena la matriz externa, puede usar _.isEqual() ya que la matriz interna ya está ordenada.

 var array1 = [['a', 'b'], ['b', 'c']]; var array2 = [['b', 'c'], ['a', 'b']]; _.isEqual(array1.sort(), array2.sort()); //true

Tenga en cuenta que .sort() las matrices. Si eso es un problema para usted, primero haga una copia usando (por ejemplo) .slice() o el operador de extensión ( ... ).

O haga lo que Daniel Budick recomienda en un comentario a continuación:

 _.isEqual(_.sortBy(array1), _.sortBy(array2))

SortBy sortBy() no mutará la matriz.

over 4 years ago · Santiago Trujillo Denunciar

0

Puedes usar lodashs xor para esto

 doArraysContainSameElements = _.xor(arr1, arr2).length === 0

Si considera que la matriz [1, 1] es diferente de la matriz [1], entonces puede mejorar el rendimiento un poco así:

 doArraysContainSameElements = arr1.length === arr2.length && _.xor(arr1, arr2).length === 0
over 4 years ago · Santiago Trujillo Denunciar

0

Ya hay respuestas aquí, pero aquí está mi implementación pura de JS. No estoy seguro de si es óptimo, pero seguro que es transparente, legible y simple.

 // Does array a contain elements of array b? const union = new Set([...a, ...b]); const contains = (a, b) => union.size === a.length && union.size === b.length; // Since order is not important, just data validity. const isEqualSet = (a, b) => union.contains(a, b) || union.contains(b, a)

La lógica de contains() es que si a contiene todos los elementos de b , ponerlos en el mismo conjunto no cambiaría el tamaño.

Por ejemplo, si const a = [1,2,3,4] y const b = [1,2] , entonces new Set([...a, ...b]) === {1,2,3,4} . Como puede ver, el conjunto resultante tiene los mismos elementos que a .

A partir de ahí, para hacerlo más conciso, podemos reducirlo a lo siguiente:

 const isEqualSet = (a: string[], b: sting[]): boolean => { const union = new Set([...a, ...b]) return union.size === a.length && union.size === b.length; }

Editar: esto no funcionará con obj[{a: true}, true, 3] pero probablemente compare los contenidos de la matriz siempre que sean elementos primitivos. Método arreglado y probado contra cadenas de dos arreglos usando los mismos valores en diferentes órdenes. No funciona con tipos de objetos. Recomiendo hacer un asistente universal que llame a una función auxiliar según el tipo que se deba comparar. Prueba _.isEqual(a. b); de la muy fantástica biblioteca lodash.

over 4 years ago · Santiago Trujillo 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