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

明明数组包含目标值,includes()却返回false?求技术协助

问题原因

你当前的sliderInterval是二维数组:range()函数返回的是一个包含150到210步长为5的一维数组,但你用push()把这个数组直接作为元素添加到了sliderInterval中,最终sliderInterval的结构是[[150, 155, 160, ..., 180, ..., 210]]。

includes()方法只会检查当前数组的直接顶层元素,它会判断sliderInterval里有没有等于180的顶层元素,但顶层只有一个子数组,所以必然返回false。

修复方案

以下三种方式都可以解决这个问题:

方案1:用concat()替代push()

concat()会将传入数组的元素展开后添加到目标数组,而非直接添加整个数组:

function range(start, end, step = 1) {
    const len = Math.floor((end - start) / step) + 1
    return Array(len).fill().map((_, idx) => start + (idx * step))
}
let sliderInterval = [];
sliderInterval = sliderInterval.concat(range(180 - 30,180 + 30,5))
console.log(sliderInterval.includes(180)); // 输出true

方案2:直接赋值给sliderInterval

既然range()已经返回了你需要的一维数组,无需先初始化空数组再push,直接赋值更简洁:

function range(start, end, step = 1) {
    const len = Math.floor((end - start) / step) + 1
    return Array(len).fill().map((_, idx) => start + (idx * step))
}
let sliderInterval = range(180 - 30,180 + 30,5);
console.log(sliderInterval.includes(180)); // 输出true

方案3:扁平化数组后再检查

如果必须保留push的添加方式(比如后续还要追加其他元素),可以用flat()将二维数组转为一维后再检查:

function range(start, end, step = 1) {
    const len = Math.floor((end - start) / step) + 1
    return Array(len).fill().map((_, idx) => start + (idx * step))
}
let sliderInterval = [];
sliderInterval.push(range(180 - 30,180 + 30,5))
console.log(sliderInterval.flat().includes(180)); // 输出true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:05:24