JavaScript异步获取数组中符合条件项索引的代码优化
优化实现方案
首先原代码除了你提到的待优化点,还存在两个显性bug:
- 变量名拼写不一致:遍历中赋值的变量是
selectedIdx,最终返回的是未定义的selectedIndex,运行时会直接触发引用错误 - 无匹配项时默认返回初始值
0,会把索引为0的元素误判为占用项,和无结果的场景混淆
针对你的三个优化诉求,结合业务场景「最多一个占用项」的约束,最终优化代码如下:
async getOccupiedItemIndex() { const items = await getItems(); const targetIndex = items.findIndex(item => item.isOccupied()); return targetIndex === -1 ? null : targetIndex; }
优化点说明
- 写法精简:既然函数已经声明为
async,直接用await接收异步返回的数组,去掉冗余的.then链式调用,不需要手动维护临时遍历变量,代码逻辑线性易读 - 空状态正确:用数组原生
findIndex方法做匹配,该方法无匹配项时固定返回-1,判断后返回null即可准确标识无结果的场景,不会出现默认返回0的误判问题 - 性能更优:
findIndex找到第一个符合条件的项后会立刻终止遍历,不需要遍历完整个数组,刚好匹配业务中最多一个占用项的约束,没有多余的遍历开销
内容的提问来源于stack exchange,提问作者Dawn17
相关产品推荐
相关产品推荐

