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.
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).
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 entriesNo solo los objetos son iguales con Arrays si intentas hacer lo mismo que arriba.
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