JavaScript for循环提取文本奇偶字符输出全空格问题修复
问题根因
你写的判断逻辑完全错了:
- 你要筛选的是位置为奇/偶的字符,判断条件应该作用在遍历的下标
i上,但你现在写的newText[i] % 2 === 0是在判断字符本身转成数字后是不是偶数。 - 空格转数字的结果是0,
0 % 2 === 0结果为true,所以文本里所有的空格都被你推进了evenletters数组,其他非偶数数字的字符(字母、汉字、标点等)转数字后是NaN,取模结果不等于0,不会被推入,最终就得到了全是空格的数组。 - 额外注意:JS字符串下标从0开始计数,和日常说的“第1位、第2位”差1个偏移:下标0对应日常计数的第1位(奇数位),下标1对应日常计数的第2位(偶数位),不要搞反。
修复后代码
btn.addEventListener('click', function() { let evenletters = [] // 存日常计数的偶数位(第2、4、6...位)字符 let oddletters = [] // 存日常计数的奇数位(第1、3、5...位)字符 for (let i = 0; i < newText.length; i++) { if (i % 2 === 0) { // 下标为偶数,对应奇数位 oddletters.push(newText[i]) } else { // 下标为奇数,对应偶数位 evenletters.push(newText[i]) } } console.log('偶数位字符:', evenletters) console.log('奇数位字符:', oddletters) })
注:如果你定义奇偶位是从下标0开始计数(下标0为偶数位),只需要把两个数组的push逻辑互换即可。
可选简化写法
如果不想写循环判断,也可以用字符串迭代方法快速实现:
// 日常计数规则下的偶数位字符 const evenletters = [...newText].filter((_, idx) => idx % 2 !== 0) // 日常计数规则下的奇数位字符 const oddletters = [...newText].filter((_, idx) => idx % 2 === 0)
内容的提问来源于stack exchange,提问作者pete
相关产品推荐
相关产品推荐

