JavaScript多维数组查找指定值索引返回-1问题解决
问题原因
你操作的是二维数组,arr.findIndex()默认只会遍历最外层的元素,也就是每一个内部子数组,比如第一个遍历到的元素是['France', 'FA', 'Paris'],本身是数组类型。你在回调里写的id === x,是拿整个子数组和字符串类型的'France'做严格相等判断,二者数据类型不同,永远不可能匹配成功,所以最终会返回代表未找到元素的-1。
修复方案
如果只需要获取目标值所在的外层数组索引,只要在findIndex的回调中判断当前遍历到的子数组是否包含目标值即可,修改后代码如下:
var arr = [ ['France', 'FA', 'Paris'], ['Allemagne', 'AJ', 'Berlin'] ]; var x = 'France'; var index = arr.findIndex(subArr => subArr.includes(x)); console.log(index); // 输出0,符合预期
如果需要同时获取目标值的外层索引和子数组内位置(即二维坐标),可以通过循环逐层判断:
var arr = [ ['France', 'FA', 'Paris'], ['Allemagne', 'AJ', 'Berlin'] ]; var x = 'France'; let outerIdx = -1; let innerIdx = -1; for (let i = 0; i < arr.length; i++) { const pos = arr[i].indexOf(x); if (pos !== -1) { outerIdx = i; innerIdx = pos; break; } } console.log(outerIdx, innerIdx); // 输出0 0,对应第一个外层子数组的第一个元素
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

