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

JavaScript中查找对象数组目标项并合并的高效实现方案

可以先将作答记录数组转换为以questionId为键的哈希结构(Map或普通对象),仅需一次遍历就可以完成索引构建,后续查找对应题目的作答记录仅需常数时间,整体时间复杂度从原来的O(n*m)优化为O(n+m),数据量越大性能提升越明显。

实现代码

基于 Map 实现(推荐)

// 预构建questionId到作答记录的映射,仅遍历一次response数组
const responseMap = new Map(response.map(item => [item.questionId, item]))

const merged = questionDetail.map(questionDetailItem => {
  const { questionId } = questionDetailItem.question
  return {
    question: questionDetailItem.question,
    choices: questionDetailItem.choices,
    response: responseMap.get(questionId)
  }
})

基于普通对象实现(兼容低版本环境)

const responseMap = {}
response.forEach(item => {
  responseMap[item.questionId] = item
})

const merged = questionDetail.map(questionDetailItem => {
  const { questionId } = questionDetailItem.question
  return {
    question: questionDetailItem.question,
    choices: questionDetailItem.choices,
    response: responseMap[questionId]
  }
})

说明

如果存在同一道题对应多条作答记录的场景,可自行调整映射构建逻辑,将映射的值改为存储对应questionId的作答记录数组即可,返回的结果结构和你原本的实现完全兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:24:01