为何findIndex()方法在此场景下返回-1?
解决findIndex返回-1的问题
首先,我看到你的代码里有两个关键问题,哪怕控制台打印的字符串看起来完全一致,也会导致findIndex()一直返回-1:
问题1:findIndex回调函数缺少return语句
你的findIndex回调函数里最后一行写了比较表达式,但没有用return返回这个结果!findIndex需要回调函数返回布尔值来判断当前元素是否匹配,而你的回调默认返回undefined(等价于false),所以永远找不到符合条件的项。
问题2:innerHTML可能引入隐藏的空白或HTML干扰
用innerHTML获取文本时,会保留元素内部的换行、空格甚至隐藏的格式字符(比如<p>标签里的换行缩进),这些肉眼看不到的内容会让两个看起来相同的字符串实际不相等。改用textContent获取纯文本会更可靠。
修正后的代码
if(e.target.className === "deleteNode") { // 获取目标div的纯文本,同时去除前后空白 const targetText = e.target.parentNode.lastChild.textContent.trim(); console.log("目标文本:", targetText); const index = allNodes.findIndex(el => { // 获取数组元素对应的纯文本,同样去除空白 const elText = el.lastChild.textContent.trim(); console.log("数组元素文本:", elText); console.log("是否匹配:", elText === targetText); // 必须return比较结果,让findIndex识别匹配项 return elText === targetText; }); console.log("找到的索引:", index); }
额外说明
- 我添加了
trim()方法,专门去除文本前后的空格、换行、制表符等隐藏空白,这是解决“看起来一样但实际不相等”问题的常用手段。 - 替换
innerHTML为textContent,确保我们只比较纯文本内容,完全避开HTML结构带来的干扰。 - 回调函数里明确return了比较结果,让
findIndex能正确判断当前元素是否符合要求。
试一下这个修正后的代码,应该就能正确获取到你需要的索引了!
内容的提问来源于stack exchange,提问作者Philip Butler
相关产品推荐
相关产品推荐

