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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:48:21