You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS使用prompt收集用户信息时数组取值异常及遍历输出重复问题

问题原因

1. 无法拿到拆分后第一个单词的原因

你调用UserList()返回的userList是二维数组:每一次prompt输入的内容经过split(' ')拆分后都会生成一个子数组,再被push到总数组里。所以userList[0]拿到的是第一个用户的姓名子数组,要拿到第一个单词需要写成userList[0][0],姓氏对应userList[0][1]。

2. 输出重复内容的原因

你的逻辑分层完全写反了:

  • User构造函数里直接固定取userList[0]和userList[1]赋值,这两个值从始至终都是固定的第一个用户的相关内容
  • 你把遍历所有用户的循环写在了单个用户的构造函数里,循环多少次就会打印多少次相同的固定值,自然重复次数和数组长度一致

修正后可运行代码

// 收集所有用户的姓名输入,返回格式为 [[姓名1, 姓氏1], [姓名2, 姓氏2]...] 的二维数组
function collectUserNames() {
  let namePairs = [];
  while (true) {
    let input = prompt('请输入你的姓名 姓氏,空格分隔');
    if (input === null) {
      alert('已取消输入');
      break;
    }
    // 简单校验格式,避免无空格输入导致异常
    const [name, surname] = input.trim().split(' ');
    if (name && surname) {
      namePairs.push([name, surname]);
    } else {
      alert('输入格式错误,请按照「姓名 姓氏」的格式输入,中间用空格分隔');
    }
  }
  return namePairs;
}

// 单个用户构造函数
function User(name, surname) {
  this.name = name;
  this.surname = surname;
  this.regDate = new Date();
}

// 主执行逻辑
const allNamePairs = collectUserNames();
const allUsers = allNamePairs.map(([name, surname]) => new User(name, surname));

// 批量打印所有用户信息
allUsers.forEach(user => {
  console.log(`姓名:${user.name},姓氏:${user.surname},注册时间:${user.regDate.toLocaleString()}`);
})

内容的提问来源于stack exchange,提问作者Roman Chernyakhovskyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:45:00