Estoy creando una aplicación de prueba simple y me gustaría almacenar un objeto de cada usuario y su puntaje en una matriz almacenada en el almacenamiento local. El problema es que cada vez que inicio la función en lugar de agregar un nuevo objeto a la matriz, los valores de los objetos existentes se cambian.
//JS code function storeUsers(userObject) { if (localStorage.getItem(users) === null) { users = [] } else { users = JSON.parse(localStorage.getItem(users)) } const userScoreTemplate = function (usersName, usersScore) { this.user = usersName; this.score = usersScore; } newUser = new userScoreTemplate(userName, score); users.push(userObject); localStorage.setItem("users", JSON.stringify(users)) } storeUsers(newUser);La referencia correcta debería resolverlo, los argumentos pasados a la function(usersName, usersScore) no serán accesibles fuera de la función, es por eso que su código no funciona. Está pasando el parámetro a la función storeUsers , por lo que debe usarse donde sea necesario.
newUser = new userScoreTemplate(userObject.userName, userObject.score);Te pierdes las comillas en localStorage.getItem .
También le recomiendo que separe la funcionalidad de su función como se muestra a continuación:
class UserScoreTemplate { constructor(userName, userScore) { this.user = userName; this.score = userScore; } } function storeUsers(userObject) { let users = []; if (localStorage.getItem("users")) { users = JSON.parse(localStorage.getItem("users")); } users.push(userObject); localStorage.setItem("users", JSON.stringify(users)); } const newUser = new UserScoreTemplate("John", "Doe"); storeUsers(newUser);Te faltan citas sobre users :
if (localStorage.getItem("users") === null) {