无法获取数组的值



还是不能理解我在这段代码中的错误。所有我想要的-通过提示符获取所有用户(姓名/姓氏)列表

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();

我遇到了一个误解,为什么我不能得到提示符的第一个单词尽管我把用户。push(响应。(' '))。userList[0] -显示第一个索引

第二,我想在console。log中获取所有用户列表但如果我得到的是相同的字符串取决于数组

的长度

userList[0]在函数User中将返回一个数组:['name', '姓']。例如,要获取名字,您需要使用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();

您正在将一个数组推入另一个数组,因此您的索引不正确(数组看起来像这样:[["firstname", "lastname"]])。您可以使用扩展运算符(...)在推入时展开项,也可以使用flat()来平展数组。

同样在创建日期时,使用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();

使用flat()

return users.flat();

编辑

我实际上理解错了这个问题(以为你只想要1个用户),另一个答案应该是正确的,更有意义。

  1. UserList不应该是构造函数。它应该只是一个返回名称数组的函数。

  2. 您不应该在User中的用户列表上迭代。然后,您应该在数组上迭代,在每次迭代中创建一个新的User应该从构造函数中生成。你可以从数组中传入每个名称并构建一个新对象。

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));
}

附加文档

  • Destructuring赋值