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

如何遍历Object的嵌套子对象并按条件为每个子对象插入键值对

实现方案

以下提供两种实现方式,可根据业务场景选择:

推荐不可变实现(不修改原始数据)

该方案会返回全新的处理后对象,不会改动原有的answers数据,适合需要保留原始数据的场景。

function processAnswers(answers) {
  // 字符串答案对应分数映射表
  const scoreMap = {
    Poor: 1,
    Good: 5,
    Excellent: 10
  }
  return Object.fromEntries(
    Object.entries(answers).map(([questionKey, questionItem]) => {
      let score = 0 // 异常场景默认值可自行调整
      const answer = questionItem.answer
      if (typeof answer === 'string') {
        score = scoreMap[answer] ?? 0
      } else if (typeof answer === 'object' && answer !== null) {
        score = Number(answer.duration) ?? 0
      }
      // 拼接新对象返回,不修改原数据
      return [questionKey, { ...questionItem, score }]
    })
  )
}

// 调用示例
const newAnswers = processAnswers(answers)

原地修改实现(直接改动原始对象)

该方案直接在原对象上新增score字段,内存占用更低,适合数据量较大且不需要保留原始数据的场景。

function processAnswersInPlace(answers) {
  const scoreMap = {
    Poor: 1,
    Good: 5,
    Excellent: 10
  }
  for (const questionKey in answers) {
    const item = answers[questionKey]
    if (typeof item.answer === 'string') {
      item.score = scoreMap[item.answer] ?? 0
    } else if (typeof item.answer === 'object' && item.answer !== null) {
      item.score = Number(item.answer.duration) ?? 0
    }
  }
  return answers
}
  • 两种实现都自动适配顶层对象任意数量的子对象,不需要提前指定键名
  • 代码中加入了异常兜底逻辑,未匹配到的字符串答案、duration不存在/非数字的场景默认返回0,可根据实际需求调整默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:27:06