Estoy siguiendo el tutorial de freeCodeCamp ( https://www.freecodecamp.org/learn/coding-interview-prep/data-structures/create-a-set-class ) para crear un conjunto. Estoy confundido por la propiedad del diccionario y la construcción de la clase ( no instanciarla, pero gracias por las respuestas). ¿Es una matriz? ¿Es un objeto sin pares de valores clave? El ejemplo que dieron hace que parezca así para mi segunda pregunta:
const set1 = new Set([1, 2, 3, 5, 5, 2, 0]); console.log(set1); // output: {1, 2, 3, 5, 0}Cuando lo trato como una matriz, no funciona. Entonces, ¿cómo creo un método de agregar o quitar para la clase Set?
class Set { constructor() { // Dictionary will hold the items of our set this.dictionary = {}; this.length = 0; } add(element){ dictionary.push(element) // fails } remove(element){ if(dictionary.indexOf(element) === -1) // fails } }No es una matriz. Set es un objeto que contiene valores únicos, tiene métodos como has y add
const set1 = new Set([1, 2, 3, 5, 5, 2, 0]); set1.has(2)// returns true set1.delete(1) // removes the value 1 set1.add(33) // adds the value 33 at the end of the setpuede recorrerlo de varias maneras usando forEach
set1.forEach( value => console.log(value) )agregar elementos a un conjunto se puede lograr fácilmente mediante el método de add a continuación hay un código de muestra para eliminar un elemento que puede usar el método de delete
var set = new Set(); set.add("one"); set.add("two"); set.add("three"); document.writeln("Size before invoking delete() method: "+ set.size+"<br>"); set.delete("three"); document.writeln("Size after invoking delete() method: "+set.size);el dictionary debería ser this.dictionary .
{} crea un objeto. Los objetos no tienen métodos push() o indexOf() . Para agregar un nuevo elemento a un objeto, asígnele un nombre de propiedad. No hay necesidad de probar si el elemento está en el objeto al eliminarlo, solo use delete para eliminar el elemento; si la clave no existe, no hará nada.
Puede usar un objeto para representar un conjunto usando las claves de objeto como elementos del conjunto, ya que las claves no se pueden duplicar. El valor puede ser cualquier cosa, se ignora porque solo estamos usando las claves.
Si desea probar si existe una clave, puede usar if (this.dictionary.hasOwnProperty(element))
class MySet { constructor() { // Dictionary will hold the items of our set this.dictionary = {}; } add(element) { this.dictionary[element] = null; } remove(element) { delete this.dictionary[element]; } get length() { return Object.keys(this.dictionary).length; } } let s = new MySet(); s.add("foo"); s.add("bar"); console.log(Object.keys(s.dictionary)); s.remove("foo"); console.log(Object.keys(s.dictionary));