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

如何在JavaScript的for循环中移除含数字6的元素?

问题分析与解决方案

你的代码存在几个核心问题,导致无法实现移除所有含数字6元素的需求:

  • 判断逻辑完全错误:myarray.indexOf(6)只会查找数组中是否存在数值6,根本识别不了16、60、66这类包含数字6的数;而且indexOf找到元素时返回它的索引(比如6在数组里的索引是5),没找到返回-1,你的if判断会把索引0(如果第一个元素是6)当成false,反而不执行删除,逻辑完全搞反了。
  • 循环索引混乱:用splice删除元素后,数组长度会缩短,但你的循环i仍在递增,会跳过被删除元素的下一个元素;而且循环从i=1开始,直接跳过了第一个元素的检查。

方法一:用filter(最简洁推荐)

Array.filter可以直接生成符合条件的新数组,逻辑清晰还不容易出错:

// 创建1到100的数组,这写法比原循环更简洁
const myarray = Array.from({length: 100}, (_, i) => i + 1);
console.log('原数组:', ...myarray);

// 过滤掉所有包含数字6的元素
const filteredArray = myarray.filter(num => !num.toString().includes('6'));
console.log('过滤后数组:', ...filteredArray);

说明:

  • Array.from({length:100}, (_,i)=>i+1)是快速生成连续数字数组的写法,和你原循环效果一致。
  • num.toString().includes('6')把数字转成字符串,直接检查是否包含字符'6',完美匹配你要移除所有含6元素的需求。

方法二:反向循环删除(直接修改原数组)

如果你非要直接修改原数组而不是生成新数组,可以用反向循环(从后往前遍历),避免splice导致的索引混乱:

var myarray = [];
for (var i = 1; i <= 100; i++) {
    myarray.push(i);       
}
console.log('原数组:', ...myarray);

// 从最后一个元素往前遍历,删除元素不会影响前面的索引
for (var i = myarray.length - 1; i >= 0; i--) {
    if (myarray[i].toString().includes('6')) {
        myarray.splice(i, 1);
    }
}
console.log('过滤后数组:', ...myarray);

说明:

  • 反向循环时,删掉当前元素后,前面未遍历的元素索引不会变,不会出现漏删的情况。
  • 同样用toString().includes('6')正确判断数字里有没有6这个字符。

再唠下原代码的坑

  1. if (myarray.indexOf(6)):当数组里有6时,indexOf(6)返回它的索引(比如5),这时候条件为真会执行删除,但如果6在第一个位置(索引0),0在布尔判断里是false,反而不会删;当数组里没6时,indexOf返回-1,-1是true,会乱删元素,逻辑完全颠倒。
  2. 就算逻辑对了,indexOf(6)也只能找到数值6,16、61这些数根本检测不到。
  3. 正向循环里用splice,删完元素数组变短,i还在递增,会跳过下一个元素(比如删了索引5的元素,原来索引6的元素现在到了5,但i马上变成6,就跳过它了)。

内容的提问来源于stack exchange,提问作者Maikel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:12:19