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
相关产品推荐
相关产品推荐

