能否编写带if判断的单行箭头函数实现查找数组指定元素索引?
现有写法是否可行?
不可行。
你的代码let found = arr.find(item => arr.indexOf(item) if item =='pens')存在两个核心问题:
- 语法错误:单行箭头函数的隐式返回位置只能写表达式,不能直接写
if语句,不符合JS语法规则。 - 方法使用错误:
Array.find()的作用是返回第一个符合条件的元素本身,无法直接返回元素索引。
正确实现方式
你的需求是查找数组中'pens'的索引,根据场景复杂度可以选以下两种方案:
方案1:直接使用Array.indexOf()(简单匹配场景首选)
仅需查找固定值的索引时,直接调用该方法即可,匹配成功返回对应索引,匹配失败返回-1:
const arr = ['notebook', 2, 'pens', 'bags', newElement] const pensIndex = arr.indexOf('pens') // 最终返回值为2
方案2:使用Array.findIndex()(复杂匹配场景使用)
如果匹配逻辑需要自定义(比如不是简单的全等判断),可以用专门返回匹配索引的findIndex方法,单行箭头函数可以用条件表达式(三元运算符)或者短路逻辑实现判断:
// 最简写法:直接返回匹配结果 const pensIndex = arr.findIndex(item => item === 'pens') // 带判断逻辑的单行写法:用三元运算符替代if语句 const pensIndex = arr.findIndex(item => item === 'pens' ? true : false)
关于带if判断的单行箭头函数说明
JS中可以实现带判断逻辑的单行箭头函数,但不能直接写if语句,需要把判断逻辑转换为表达式:
// 错误写法:单行隐式返回不支持if语句 const wrongFunc = item => if(item === 'pens') return item // 正确的单行写法:用条件表达式实现判断 const rightFunc = item => item === 'pens' ? item : undefined // 如果你一定要用if语句,可以加花括号包裹(属于显式返回,需要手动写return) const funcWithIf = item => { if(item === 'pens') return item }
内容的提问来源于stack exchange,提问作者Phong Trang
相关产品推荐
相关产品推荐

