You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS/TS中是否有更优方法按属性查找数组指定对象的索引

解答

JavaScript 数组原生提供了Array.prototype.findIndex()内置方法,完全可以实现你要的查找目标项索引的效果,不需要手动写forEach循环遍历。

用法说明

findIndex会按顺序遍历数组,返回第一个满足你自定义判断条件的元素的索引,遍历到匹配项就会终止,不会走完整个数组,性能比全量遍历的forEach更好;如果全数组都没有匹配项,会返回-1,方便你做异常兜底。

代码改造示例

把你原来写的forEach遍历逻辑替换成findIndex即可,其他逻辑不用动:

const openExerciseListModal = (index:number) =>{
  const selectedValue = selectedItems[index];
  // 替换原forEach逻辑
  const matchIndex = items.findIndex(element => element.value === selectedValue);
  if (matchIndex !== -1) {
    alert(matchIndex)
  }
  savedExercises = [...selectedExercise]
  setExerciseListModalVisible(() => !isExerciseListModalVisible)
}

效果验证

针对你给出的示例数组结构:

[{ label: "Monday", value: "Monday" },{ label: "Tuesday", value: "Tuesday" }]
  • 选中Monday时,匹配到的索引为0,完全符合你的预期
  • 选中Tuesday时,匹配到的索引为1
  • 如果选中的value不在数组里,会返回-1,你可以按需加提示逻辑,比原有写法更严谨

注意:如果你业务里存在多个元素value相同的情况,findIndex只会返回第一个匹配项的索引;你原来写的forEach逻辑会依次弹出所有匹配项的索引,这种场景下如果要保留原有表现,还是需要用循环写法。从你给出的数组示例看value和选项文本一一对应,属于值唯一的场景,用findIndex是最优选择。

内容的提问来源于stack exchange,提问作者Bonhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:54:30