JS数组indexOf问题:如何查找同一数组中多个元素的索引
现象原因
Array.prototype.indexOf() 方法的标准语法只接收两个有效参数:
- 第一个参数:需要查找的目标值,方法只会对这个值做匹配
- 第二个参数:可选的查找起始位置,必须是数字类型
这个方法本身只支持查找单个目标值,无论你在后面传入多少个额外参数,都不会被当成待查找目标处理。你写的secretMessage.indexOf('get','easily')中,传入的第二个参数'easily'是字符串,会被JavaScript隐式转换为数字,转换结果为NaN,此时引擎会默认从数组索引0的位置开始查找,最终只会返回'get'对应的索引6。另外你的代码里console.log的括号没有闭合,运行时会先触发语法错误,记得补上末尾的右括号。
同时返回多个目标元素索引的实现方式
你可以根据使用场景选择下面的简单方案:
- 方案1:针对少量固定要找的元素,直接多次调用
indexOf()即可,逻辑最直观适合新手
let secretMessage = ['Learning', 'is', 'not', 'about', 'what', 'you', 'get', 'easily', 'the', 'first', 'time,', 'it', 'is', 'about', 'what', 'you', 'can', 'figure', 'out.', '-2015,', 'Chris', 'Pine,', 'Learn', 'JavaScript']; const getIndex = secretMessage.indexOf('get'); const easilyIndex = secretMessage.indexOf('easily'); console.log(getIndex, easilyIndex); // 运行结果:6 7
- 方案2:如果需要查找的目标元素比较多,可以封装一个简单的批量查找函数,一次传入所有要找的元素就能拿到全部索引
function findIndexes(arr, ...targets) { const indexList = []; for (let i = 0; i < targets.length; i++) { indexList.push(arr.indexOf(targets[i])); } return indexList; } // 调用示例 console.log(findIndexes(secretMessage, 'get', 'easily', 'JavaScript')); // 运行结果:[6, 7, 23]
内容的提问来源于stack exchange,提问作者Liam Okeeffe
相关产品推荐
相关产品推荐

