Node.js中如何通过readline实现单行控制台输入填充数组?
单行输入填充数组的解决方案
你当前的代码通过循环调用rl.question()实现逐行输入,所以会出现每次输入一个值的情况。要实现单行输入多个值填充数组,只需要获取一次整行输入,再将输入内容分割为数组元素即可。
修改后的代码如下:
import * as readline from 'node:readline/promises'; import { stdin as input, stdout as output } from 'process'; const rl = readline.createInterface({ input, output }); let arr = []; const inputStr = await rl.question('Enter Values: '); // 按空格分割输入字符串,得到数组 arr = inputStr.split(' '); // 可选:过滤连续空格产生的空元素,并限制数组最多5个元素(和原循环次数对应) arr = inputStr.split(' ').filter(item => item.trim() !== '').slice(0, 5); console.log('输入的数组内容:', arr); await rl.close();
代码说明:
- 仅调用一次
rl.question(),提示语直接放在参数中,用户输入时会紧跟提示语,实现单行输入的效果 split(' ')将整行输入的字符串按空格分割为数组元素filter方法用于过滤连续空格产生的空字符串,slice(0,5)确保数组最多保留5个元素,匹配你原代码的循环次数- 最后调用
rl.close()关闭readline接口,避免进程挂起
运行后效果:
Enter Values: 1 A 2 B 3 输入的数组内容: [ '1', 'A', '2', 'B', '3' ]
如果需要将数值类元素转为数字类型,可以遍历数组处理:
arr = inputStr.split(' ') .filter(item => item.trim() !== '') .slice(0,5) .map(item => isNaN(Number(item)) ? item : Number(item));
内容的提问来源于stack exchange,提问作者Warface2009
相关产品推荐
相关产品推荐

