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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:28:20