Tengo el siguiente desafío para practicar OOP en javascript:
El Banco debe permitirnos:
Agregar clientes
Entonces hice lo siguiente, creé una clase Bank con diferentes métodos.
Parece funcionar bien con 1 persona, pero mi problema es que una vez que agrego un nuevo cliente y ejecuto los métodos en el nuevo cliente, devuelve el valor del primer cliente.
class Bank { constructor() { this.customers = []; } addCustomer(customer) { this.customers.push({ name: customer, account: 0 }); } printAccount(customer) { if (this.customers.some((person, idx) => person.name === customer)) { console.log( `${this.customers[0].name}'s account is ${this.customers[0].account}` ); } else { console.log("no access"); } } depositAmount(customer, amount) { if (this.customers.some(person => person.name === customer)) { this.customers[0].account += amount; } else { return; } } withdrawAmount(customer, amount) { if (this.customers.some(person => person.name === customer)) { this.customers[0].account -= amount; } else { return; } } } const bank = new Bank(); bank.addCustomer("daniel"); bank.depositAmount("daniel", 10); bank.withdrawAmount("daniel", 5); bank.printAccount("daniel"); bank.addCustomer("gwen"); bank.depositAmount("gwen", 10); bank.printAccount("gwen"); console.log(bank);Siempre usa this.customers[0] en sus métodos, por lo que siempre opera en el primer cliente.
Use find() para encontrar el objeto del cliente y utilícelo.
class Bank { constructor() { this.customers = []; } addCustomer(customer) { this.customers.push({ name: customer, account: 0 }); } getCustomer(name) { return this.customers.find(person => person.name == name); } printAccount(name) { const customer = this.getCustomer(name); if (customer) { console.log( `${customer.name}'s account is ${customer.account}` ); } else { console.log("no access"); } } depositAmount(name, amount) { const customer = this.getCustomer(name); if (customer) { customer.account += amount; } } withdrawAmount(name, amount) { this.depositAmount(name, -amount); } } const bank = new Bank(); bank.addCustomer("daniel"); bank.depositAmount("daniel", 10); bank.withdrawAmount("daniel", 5); bank.printAccount("daniel"); bank.addCustomer("gwen"); bank.depositAmount("gwen", 10); bank.printAccount("gwen"); console.log(bank);Deberías usar find en su lugar:
depositAmount(customer, amount) { const customer = this.customers.find((person) => person.name === customer); if (!customer) return; // no customer exists customer.account += amount; // add to customer } Si no se encontró ningún cliente, devuelve undefined y puede comprobarlo.