Todavía no puedo entender mi error con este código. Todo lo que quiero: a través del aviso , obtenga toda la lista de usuarios (nombre / apellido)
function UserList() { let users = []; while (true) { let response = prompt('Please, enter your name surname?'); if (response == null) { alert('cancel'); break; } users.push(response.split(' ')); } return users; } function User() { this.name = userList[0]; this.surname = userList[1]; this.regDate = new Date; for (i = 0; i < userList.length; ++i) { console.log('Name: ' + this.name + ' Surname: ' + this.surname + '. Date of registration : ' + this.regDate) } } let userList = new UserList(); let user = new User();Y me enfrenté a un malentendido de por qué no puedo obtener la primera palabra del aviso a pesar de que puse users.push (response.split(' ')). userList [0]: muestra el primer índice de la matriz en lugar de la primera palabra.
Y segundo, quiero obtener toda la lista de usuarios en console.log pero, en cambio, obtengo la misma cadena según la longitud de la matriz
userList[0] en la función Usuario devolverá una matriz: ['nombre', 'apellido']. Para obtener el primer nombre, por ejemplo, debe usar this.name = userList[i][0]
function UserList() { let users = []; while (true) { let response = prompt('Please, enter your name surname?'); if (response == null) { alert('cancel'); break; } users.push(response.split(' ')); } return users; } function User() { for (var i = 0; i < userList.length; ++i) { this.name = userList[i][0]; this.surname = userList[i][1]; this.regDate = new Date; console.log('Name: ' + this.name + ' Surname: ' + this.surname + '. Date of registration : ' + this.regDate) } } let userList = new UserList(); let user = new User();UserList no debería ser un constructor. Debería ser solo una función que devuelva una matriz de nombres.
No debería estar iterando sobre la lista de usuarios dentro User . Luego, debería iterar sobre la matriz creando un nuevo User en cada iteración que debería generarse a partir de un constructor. Simplemente puede pasar cada nombre de la matriz y construir un nuevo objeto.
function getNames() { const users = []; while (true) { const response = prompt('Please, enter your first and last names'); if (response == null) break; users.push(response.split(' ')); } return users; } // Pass in a user name from the array as an argument // It's array so we can destructure the first and last name // immediately function User([first, last]) { this.first = first; this.last = last; this.regDate = new Date(); this.message = `Name: ${this.first}. Surname: ${this.last}. Date of registration: ${this.regDate}.`; } // Iterate over the array generated by `getUsers` // and for each name create a new user. for (let name of getNames()) { console.log(new User(name)); }Documentación adicional
Está insertando una matriz en otra matriz, por lo que su índice no es correcto (la matriz se ve así: [["firstname", "lastname"]] ). Puede distribuir los elementos al presionar con el operador de distribución ( ... ), también puede aplanar la matriz con flat() .
Además, al crear una fecha, use new Date() .
function UserList() { let users = []; while (true) { let response = prompt('Please, enter your name surname?'); if (response == null) { alert('cancel'); break; } users.push(...response.split(' ')); // flatten } return users; } function User() { this.name = userList[0]; this.surname = userList[1]; this.regDate = new Date(); // () console.log('Name: ' + this.name + ' Surname: ' + this.surname + '. Date of registration : ' + this.regDate) } let userList = new UserList(); let user = new User(); Usando flat()
return users.flat();De hecho, entendí mal la pregunta (pensé que solo querías 1 usuario), la otra respuesta debería ser correcta y tiene más sentido.