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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:32:41