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

JavaScript如何将字典列表按指定层级组合为嵌套字典

实现方案

核心说明

任意嵌套层级都可以实现,只需传入指定的层级字段列表即可动态适配,不需要修改核心逻辑。

通用实现函数

/**
 * 动态嵌套合并对象数组
 * @param {Array} items 待合并的原始对象数组
 * @param {Array} levelFields 嵌套层级的字段列表,按嵌套顺序传入
 * @param {String} valueField 最终叶子节点存储的取值字段
 * @returns {Object} 嵌套合并后的结果
 */
function nestByLevels(items, levelFields, valueField) {
  const result = {}
  items.forEach(item => {
    let currentLevel = result
    for (let i = 0; i < levelFields.length; i++) {
      const currentKey = item[levelFields[i]]
      // 到达最后一层时存储对应值
      if (i === levelFields.length - 1) {
        // 如果相同路径需要累加值,可替换为 currentLevel[currentKey] = (currentLevel[currentKey] || 0) + item[valueField]
        currentLevel[currentKey] = item[valueField]
        continue
      }
      // 非最后一层不存在则初始化空对象
      if (!currentLevel[currentKey]) currentLevel[currentKey] = {}
      currentLevel = currentLevel[currentKey]
    }
  })
  return result
}

调用示例

// 原始数据整理为数组
const dictList = [
  {gender: 'male', age_group: 'young', favourite_band: 'Metallica', number_of_visits: 42},
  {gender: 'female', age_group: 'old', favourite_band: 'Beatles', number_of_visits: 2},
  {gender: 'male', age_group: 'young', favourite_band: 'Foo Fighters', number_of_visits: 1},
  {gender: 'male', age_group: 'old', favourite_band: 'Rolling Stones', number_of_visits: 12}
]

// 按需求传入层级字段列表,得到目标结果
const result = nestByLevels(dictList, ['gender', 'age_group', 'favourite_band'], 'number_of_visits')

多层级扩展说明

如果需要新增嵌套层级,只需要调整levelFields参数即可,无需修改函数逻辑。比如要新增province作为第三级嵌套,只需把层级字段列表改为['gender', 'age_group', 'province', 'favourite_band']即可自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:07