使用Array.prototype.findIndex()查找对象索引:传参优化及有效性咨询
关于Array.prototype.findIndex()传参的优化方案及适用性解答
你的现有实现方式其实非常合理,而且在绝大多数日常开发场景下都完全适用!先给你吃个定心丸——利用闭包让回调函数访问外部的target变量,是JavaScript里很常规且直观的写法,可读性和维护性都不错。
不过如果你想让代码更简洁或者更具复用性,这里有几种更优的写法供你参考:
1. 使用ES6箭头函数(最推荐)
箭头函数会自动继承外部作用域的变量,写法更简洁清爽,现在ES6+已经是主流环境,非常推荐这种方式:
const array1 = [{name: "Adam", id: 23},{name: "Badam", id: 55}]; const target = 55; const res = array1.findIndex(element => element.id === target); // 返回1
2. 利用findIndex的第二个参数thisArg
findIndex方法本身支持第二个参数,用来指定回调函数内部的this指向,你可以把target挂载到一个对象上传递进去:
const array1 = [{name: "Adam", id: 23},{name: "Badam", id: 55}]; const target = 55; const res = array1.findIndex(function(element) { return element.id === this.target; }, { target });
不过这种方式不如闭包直观,除非你有特殊的this绑定需求,否则一般不优先考虑。
3. 封装成可复用工具函数
如果你需要多次根据id查找数组对象的索引,把逻辑封装成独立函数会更灵活:
const array1 = [{name: "Adam", id: 23},{name: "Badam", id: 55}]; function getIndexById(arr, targetId) { return arr.findIndex(item => item.id === targetId); } const res = getIndexById(array1, 55); // 返回1
这种方式不仅让代码更模块化,后续修改查找逻辑也只需要改一处,复用性拉满。
关于原始写法的适用性
你的原始写法完全没问题,在简单的单次查找场景下,它的可读性和简洁度已经足够,不需要刻意替换。只有当你追求更极致的简洁性,或者需要多次复用查找逻辑时,再考虑上面的优化方案。
内容的提问来源于stack exchange,提问作者JUlinder
相关产品推荐
相关产品推荐

