如何实现自定义数组索引查找:未找到返回-1且返回最后匹配项
自定义lastIndexOf函数:返回最后匹配索引或-1
让我来帮你搞定这个需求!你需要实现一个能返回数组中目标值最后一次出现的索引的自定义函数,找不到时返回-1,还不能用原生indexOf方法。先看看你现有代码里的几个问题:
- 循环里一找到匹配项就立刻返回,这会直接拿到第一个匹配的索引,根本没机会遍历到后面的元素,自然得不到最后一次出现的位置
- 处理
undefined的逻辑有问题:如果目标值是undefined但数组里本身有undefined元素,你的代码会直接返回-1,不符合需求 - 没考虑完全遍历数组后仍无匹配的场景,这种情况应该返回-1
正确的实现思路
- 初始化一个变量保存最后一次匹配的索引,默认设为
-1(对应没找到的情况) - 完整遍历整个数组,每遇到和目标值相等的元素,就把当前索引更新到这个变量里
- 遍历结束后直接返回这个变量——如果没找到匹配项,它会保持初始的
-1,完美符合要求
实现代码
function lastIndexOf(array, value) { let lastMatchIndex = -1; for (let i = 0; i < array.length; i++) { // 严格相等判断,正确处理包括undefined在内的所有值 if (array[i] === value) { lastMatchIndex = i; } } return lastMatchIndex; }
代码关键点解释
- 用
lastMatchIndex持续追踪最后一次匹配的位置:每次找到匹配项就更新它,遍历完成后这个变量就是最后一次出现的索引 - 不需要单独处理
undefined:===运算符会正确判断数组中的undefined元素和目标值undefined是否相等 - 空数组、无匹配项的场景都被自然覆盖:初始值
-1会直接返回
测试用例验证
// 测试最后一次出现的索引 console.log(lastIndexOf([1,2,3,2,1], 2)); // 输出3 // 测试无匹配项的情况 console.log(lastIndexOf(['a','b','c'], 'd')); // 输出-1 // 测试目标值为undefined的情况 console.log(lastIndexOf([undefined, null, undefined], undefined)); // 输出2 // 测试空数组 console.log(lastIndexOf([], 5)); // 输出-1
内容的提问来源于stack exchange,提问作者Binny.H
相关产品推荐
相关产品推荐

