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

359
Vistas
¿Por qué Set() repite valores?

Estoy tratando de usar Set() en js para recuperar algunos 'datos únicos', pero me sigue devolviendo valores repetidos.

Depuración de la consola: Depuración de la consola

Código:

 userStories.add({ user_id: storie.user_id, avatar: storie.user.avatar, });
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

¿Parece que está tratando de evitar la duplicación de usuarios?

Es inteligente tratar de usar un conjunto, porque los conjuntos evitan la duplicación, pero desafortunadamente solo funcionan de la forma prevista si el elemento es un tipo de datos primitivo como String o Number , y no si es un objeto, es decir, de la forma { key: value, ... } .

Si el elemento es solo una cadena, por ejemplo, "Bob", porque el Conjunto considera que dos cadenas "Bob" y "Bob" son idénticas, por lo que se ingresarán como un solo elemento.

Sin embargo, si su elemento es un objeto , por ejemplo, {nombre: "Bob"}, entonces dos elementos definidos por separado como {name: "Bob"} y {name: "Bob"} se considerarán desiguales, por lo que se ingresarán como dos diferentes elementos del Conjunto.

Intenta usar un objeto simple

Inicializar así:

 userStories = {}

Y luego para cada entrada:

 userStories[user_id]=({ avatar: storie.user.avatar, });

De esta manera, terminas con esta estructura:

 userStories: { 1234: { avatar: "abc.jpg" }, 1258: { avatar: "def.jpg" }, etc }

Puede usar esta estructura de Objeto de la misma manera que estaba usando el Conjunto, con dos ventajas:

(a) Si ingresa dos entradas idénticas, como 1234: { avatar: "abc.jpg" } , solo se almacenará una.

(b) Puede acceder directamente al avatar de cualquier persona, por su identificación. (Con el Conjunto, aún tendría que buscar de alguna manera los elementos para encontrar el correcto).

about 4 years ago · Juan Pablo Isaza Denunciar

0

El objeto Set le permite almacenar valores únicos de cualquier tipo, ya sean valores primitivos o referencias a objetos, no solo objetos. Ver referencia MDN

 const mySet = new Set(); const object1 = {a:1, b:1}; mySet.add(object1); mySet.add(object1); console.log(mySet); // The set will be having only 1 entry as both the times we added the same reference of object1.

Sin embargo, si intenta insertar diferentes referencias de objetos, el conjunto continúa agregando objetos. Por ejemplo:

 const mySet = new Set(); const object1 = {a:1, b:1}; mySet.add(object1); mySet.add({a:1,b:1}); // This is a new object not the object1 console.log(mySet); It will have 2 entries

No solo los objetos son iguales con Arrays si intentas hacer lo mismo que arriba.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Los objetos en JavaScript son tipos de referencia , lo que significa que cuando crea un nuevo objeto en su función, JavaScript piensa que son diferentes (incluso cuando tienen los mismos valores).

Del artículo:

Si son objetos distintos, incluso si contienen propiedades idénticas, la comparación resultará falsa.

 var arr1 = ['Hi!']; var arr2 = ['Hi!']; console.log(arr1 === arr2); // -> false
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