JavaScript使用indexOf查找嵌套数组索引返回-1问题咨询
问题原因
核心逻辑
indexOf 方法匹配元素时底层使用*严格相等运算符(===)*做判断,而数组属于JavaScript中的引用类型,两个独立创建的数组即使内部元素完全一致,只要指向的内存地址不同,严格相等判断就会返回false。
你代码中传入 indexOf 的 ["bob", 5] 是全新创建的数组实例,和 items 中首个元素的内容完全一致但属于不同引用,因此匹配失败,最终返回 -1。
补充说明
- 字符串、数字等基础值类型使用
indexOf不会出现该问题,因为基础类型直接比较值本身,内容一致就会判定为相等 - 数组、普通对象、函数等引用类型,都存在「内容一致但严格相等判断为假」的特性
预期效果实现方案
如果需要按内容匹配查找下标,可以使用findIndex方法自定义匹配规则:
const items = [ ["bob", 5], ["jeff", 2], ["wal-E", 2], ["bob", 1], ["bob", 10] ]; const index = items.findIndex(item => item[0] === "bob" && item[1] === 5); // 此时index返回 0,符合预期结果
内容的提问来源于stack exchange,提问作者Seesi L
相关产品推荐
相关产品推荐

