Escriba una clase llamada Grupo (ya que Set ya está tomado). Al igual que Set, tiene agregar, eliminar y tiene métodos. Su constructor crea un grupo vacío, add agrega un valor al grupo (pero solo si aún no es un miembro), delete elimina su argumento del grupo (si era un miembro) y devuelve un valor booleano que indica si su argumento es un miembro del grupo.
Use el operador ===, o algo equivalente como indexOf, para determinar si dos valores son iguales.
Dale a la clase un método from estático que tome un objeto iterable como argumento y cree un grupo que contenga todos los valores producidos al iterarlo.
Esta es la pregunta que necesito resolver y debajo está mi código que da error.
El error aquí es:
TypeError no detectado: this.add no es una función
No sé por qué se necesita este método estático aquí, por favor hágamelo saber. Y ayúdame a borrar este error.
class Group { constructor() { this.group = []; return this; } add(value) { if (!this.has(value)) { this.group.push(value); return this; } } delete(value) { if (this.has(value)) { this.group = this.group.filter(x => x !== value) return this; } } has(value) { return this.group.includes(value) } static from(iterableObject) { for (let value of iterableObject) { this.add(value); } return this; } } let group = Group.from([10, 20]); console.log(group.has(10)); // → true console.log(group.has(30)); // → false group.add(10); group.delete(10); console.log(group.has(10)); //→ falseEl objetivo es:
Dale a la clase un método from estático que tome un objeto iterable como argumento y cree un grupo que contenga todos los valores producidos al iterarlo.
Entonces, dentro del método, necesitas
crea un grupo
que se puede hacer con new Group , entonces
contiene todos los valores producidos al iterar sobre él
con el bucle haciendo referencia a ese grupo recién creado, y luego devolver el grupo creado.
static from(iterableObject) { const group = new Group(); for (const value of iterableObject) { group.add(value); } return group; } class Group { constructor() { this.group = []; return this; } add(value) { if (!this.has(value)) { this.group.push(value); return this; } } delete(value) { if (this.has(value)) { this.group = this.group.filter(x => x !== value) return this; } } has(value) { return this.group.includes(value) } static from(iterableObject) { const group = new Group(); for (const value of iterableObject) { group.add(value); } return group; } } let group = Group.from([10, 20]); console.log(group.has(10)); // → true console.log(group.has(30)); // → false group.add(10); group.delete(10); console.log(group.has(10)); //→ falseNo sé por qué se necesita este método estático aquí
Se puede pensar que un método estático tiene una apariencia similar a una función independiente (en términos de cómo se llama), excepto que es una propiedad de la clase misma. Podrías hacer equivalentemente
const createGroupFrom = (iterable) => { // implementation here };Pero ser estático generalmente indica una función que está relacionada con la clase, sin estar vinculada a una instancia particular ya existente. (Los métodos que están directamente relacionados con el trabajo en instancias ya existentes se implementan como métodos regulares no estáticos .
En esta situación, un método normal claramente no funcionaría, porque no se invocaría en una instancia existente; una instancia existente no existe. Entonces, las opciones son tener una función simple e independiente, o un método estático, si uno lo prefiere, y el requisito dado es usar un método estático.
Como se indica en MDN :
La palabra clave static define un método estático o una propiedad para una clase, o un bloque de inicialización estático de clase (consulte el enlace para obtener más información sobre este uso). No se pueden invocar métodos estáticos ni propiedades estáticas en instancias de la clase. En su lugar, se llaman en la propia clase .
En el método estático que tienes,
static from(iterableObject) { for (let value of iterableObject) { this.add(value); } return this; } Pero lo que querrá hacer es establecer una referencia a una nueva instancia de Group y devolver esa instancia:
class Group { constructor() { this.group = []; return this; } add(value) { if (!this.has(value)) { this.group.push(value); return this; } } delete(value) { if (this.has(value)) { this.group = this.group.filter(x => x !== value) return this; } } has(value) { return this.group.includes(value) } static from(iterableObject) { var newGroup = new Group(iterableObject); for (let value of iterableObject) { newGroup.add(value); } return newGroup; } } let group = Group.from([10, 20]); console.log(group.has(10)); // → true console.log(group.has(30)); // → false group.add(10); group.delete(10); console.log(group.has(10)); //→ false