Node.js如何将多输出姓名合并为单个数组并随机抽取单个值
解决方法
你之前的问题是在循环里直接调用bot.say逐行输出姓名,且每次循环都重新定义姓名变量,没有统一收集所有姓名,所以后续处理会得到多个独立数组。你只需要先把所有符合要求的姓名收集到同一个数组中,再做乱序、抽取操作即可。
bot.webex.memberships.list({roomId: bot.room.id}) .then((memberships) => { // 初始化空数组存储所有有效姓名 const nameList = []; for (const member of memberships.items) { if (member.personId === bot.person.id) { // 跳过机器人自身 continue; } // 优先取显示名,取不到则用邮箱 const name = member.personDisplayName || member.personEmail; nameList.push(name); } // Fisher-Yates 算法打乱数组,比sort随机排序可靠性更高 for (let i = nameList.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [nameList[i], nameList[j]] = [nameList[j], nameList[i]]; } // 非空判断避免空数组报错,抽取打乱后的第一个元素播报即可 if (nameList.length > 0) { const randomName = nameList[0]; bot.say(`Hello ${randomName}`); } })
你之前用split得到多个数组的原因是,原代码每次循环都单独输出一段内容,你对每段输出单独做split操作自然会得到多个独立数组,统一在原始数据收集阶段就组装成单个数组,就可以避免这个问题,也不需要额外处理输出的
<p>标签。
内容的提问来源于stack exchange,提问作者stevemayster
相关产品推荐
相关产品推荐

