Estoy trabajando en un script de raspado y encontré un objeto Set que debería almacenar datos únicos y un rendimiento rápido. Así que lo intenté así
let scrapedMessages = new Set() scrapedMessages.add({ text, ...(images.length > 0 && { images, }), senderID, timestamp, })Pero al mirar los datos raspados descubrí este tipo de datos duplicados
{ "text": "Acne Fighting Facial Wash With Jojoba Beads", "senderID": "361571627329333", "timestamp": "1613017270619" }, { "text": "Acne Fighting Facial Wash With Jojoba Beads", "senderID": "361571627329333", "timestamp": "1613017270619" }¿Significa que el Conjunto de objetos podría no ser único o que estoy cometiendo algunos errores? Lo estaba haciendo a través de una matriz simple. Pero cambió al tipo Establecer para un mejor rendimiento. ¿Se puede lograr? cual es la mejor practica?
Estoy ejecutando el script del titiritero en Nodejs.
JS usa el operador === para comparar el nuevo elemento con todos los demás que ya existen en el conjunto y, en función de eso, decide agregar el nuevo elemento o ignorarlo.
El problema es que los objetos son direcciones de memoria:
const a = {x: 1}; const b = {x: 1}; const c = a; console.log(a===b); // false console.log(a===c); // true console.log(b===c); // falseAsí que aquí hay un par de cosas que puedes hacer:
Extienda la clase Set y anule el método add para comparar las propiedades del objeto en lugar de usar ==== .
NO SE RECOMIENDA , pero simplemente puede usar JSON.stringify(object) antes de agregarlo.