无法获取数组的值

Can't get value of array

仍然无法理解我对这段代码的错误。 所有我想要的 - 通过 提示 获取所有用户列表(姓名/姓氏)

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

而且我遇到了一个误解,为什么尽管我输入了 users.push (response.split(' ')),但我还是无法得到 prompt 的第一个词。 userList [0] - 显示数组的第一个 index 而不是第一个单词。

其次,我想获取 console.log 中的所有用户列表,但我根据数组的长度得到相同的字符串

您正在将一个数组压入另一个数组,因此您的索引不正确(数组如下所示:[["firstname", "lastname"]])。您可以在使用 spread operator (...) 推送时展开项目,也可以使用 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 个用户),另一个答案应该是正确的并且更有意义。

userList[0] 在函数 User 中将 return 一个数组:['name', 'surname']。 例如,要获取名字,您需要使用 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();
  1. UserList 不应是构造函数。它应该只是一个函数,returns 一个名称数组。

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

其他文档