JavaScript中使用findIndex()出现TypeError错误的问题求助
解决findIndex抛出TypeError的问题
哦,这个问题我太熟悉啦!你遇到的错误根源在于对findIndex方法的用法理解有误——它必须接收一个回调函数作为参数,而不是直接传入要查找的数值。
你的代码问题出在哪?
看这段关键代码:
var isNumberInArray = arr.findIndex(number);
这里的number是numberProducer(1)生成的数值(也就是2),而findIndex会尝试把传入的参数当成函数来调用,自然就会抛出TypeError: 2 is not a function的错误。哪怕你传入固定值比如arr.findIndex(3),也会触发同样的错误,因为数值不是函数。
正确的写法
你需要给findIndex传递一个回调函数,这个函数会遍历数组中的每个元素,返回true或false来判断当前元素是否是你要找的目标。这里有两种常用写法:
箭头函数写法(ES6+)
const numberProducer = function(n) { return n + 1; }; var number = numberProducer(1); var arr = [1, 2, 3, 4]; var isNumberInArray = arr.findIndex(item => item === number); if (isNumberInArray === -1) { // 数字不存在时的逻辑 console.log("数字不在数组里"); } else { // 数字存在时的逻辑,isNumberInArray就是对应的索引 console.log(`数字在索引${isNumberInArray}的位置`); }
普通函数写法(兼容旧环境)
const numberProducer = function(n) { return n + 1; }; var number = numberProducer(1); var arr = [1, 2, 3, 4]; var isNumberInArray = arr.findIndex(function(item) { return item === number; }); if (isNumberInArray === -1) { // 数字不存在时的逻辑 console.log("数字不在数组里"); } else { // 数字存在时的逻辑 console.log(`数字在索引${isNumberInArray}的位置`); }
额外小提示
如果你只是想检查数字是否存在、不需要索引的话,可以用arr.includes(number),它会直接返回布尔值,写法更简洁;但如果需要获取索引,findIndex就是正确的选择。
内容的提问来源于stack exchange,提问作者ShadeOfLight
相关产品推荐
相关产品推荐

