如何按指定规则实现查找数组中间元素的JavaScript函数?
数组中间元素查找函数实现
原代码问题分析
你写的代码存在几个明显问题:
- 函数名存在拼写错误(
findMidlle少了字母d) - 没有按照规则过滤数组中的
null元素,直接用原数组长度计算索引 - 偶数长度时的加法除以2逻辑只适用于求数字平均值,完全不匹配需求里的字符串等类型元素的返回规则
- 没有处理空数组、全
null数组等极端场景
规则提炼
结合所有示例可以推导出执行逻辑:
- 先过滤输入数组中所有值为
null的元素,得到有效元素数组 - 特殊场景处理:
- 输入数组本身为空,直接返回
null - 过滤后有效元素数组为空,返回
undefined
- 输入数组本身为空,直接返回
- 通用计算逻辑:有效数组长度为
n时,中间元素索引为Math.floor((n - 1) / 2),返回该索引对应的元素即可
正确实现代码
function findMiddle(arr) { // 处理原数组为空的场景 if (arr.length === 0) return null // 过滤所有null值得到有效数组 const validArr = arr.filter(item => item !== null) // 处理过滤后无有效元素的场景 if (validArr.length === 0) return undefined // 计算中间索引 const midIndex = Math.floor((validArr.length - 1) / 2) return validArr[midIndex] }
验证结果
所有示例运行结果均符合要求:
findMiddle(['a','b','c'])=>'b'findMiddle(['a','b','c','d'])=>'b'findMiddle(['a','b','c','d','e'])=>'c'findMiddle([])=>nullfindMiddle(['a'])=>'a'findMiddle([null])=>undefinedfindMiddle(['a',null,'c'])=>'a'findMiddle(['a','b','c',null, null])=>'b'
内容的提问来源于stack exchange,提问作者Илья Калошин
相关产品推荐
相关产品推荐

