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

基于键数组与目标值创建嵌套JavaScript对象

将对象数组转换为嵌套JavaScript对象

给定一个包含value和keys数组的对象数组,我们需要将其转换为层级嵌套的JavaScript对象,以下是原生JavaScript的实现方案:

源数组

[ 
  { value: 'res-1', keys: [ 'first' ] },
  { value: 'res-2', keys: [ 'second', 'deeperOne' ] },
  { value: 'res-3', keys: [ 'second', 'deeperTwo' ] },
  { value: 'res-4', keys: [ 'second', 'deeperThree', 'moreDeeper' ] },
  { value: 'res-5', keys: [ 'third' ]} 
 ]

期望结果

{
  first: 'res-1',
  second: {
    deeperOne: 'res-2',
    deeperTwo: 'res-3',
    deeperThree: {
      moreDeeper: 'res-4'
    }
  },
  third: 'res-5'
}

实现代码

const transformArrayToNestedObj = (arr) => {
  const result = {};
  
  arr.forEach(item => {
    let currentLevel = result;
    const keys = item.keys;
    const value = item.value;
    
    // 遍历键数组,处理除最后一个键外的层级
    for (let i = 0; i < keys.length - 1; i++) {
      const key = keys[i];
      // 当前层级无该键则创建空对象
      if (!currentLevel[key]) {
        currentLevel[key] = {};
      }
      // 进入下一层级
      currentLevel = currentLevel[key];
    }
    
    // 给最后一个键赋值
    currentLevel[keys[keys.length - 1]] = value;
  });
  
  return result;
};

// 测试调用
const sourceArray = [ 
  { value: 'res-1', keys: [ 'first' ] },
  { value: 'res-2', keys: [ 'second', 'deeperOne' ] },
  { value: 'res-3', keys: [ 'second', 'deeperTwo' ] },
  { value: 'res-4', keys: [ 'second', 'deeperThree', 'moreDeeper' ] },
  { value: 'res-5', keys: [ 'third' ]} 
 ];

const nestedObj = transformArrayToNestedObj(sourceArray);
console.log(nestedObj);

代码说明

  • 初始化空对象result作为最终返回的嵌套结构容器
  • 遍历源数组的每一项,针对keys数组逐层构建嵌套:
    • 对除最后一个键外的所有键,检查当前层级是否存在该键,不存在则创建空对象,随后进入下一层级
    • 遍历到最后一个键时,将对应value赋值给该键
  • 该逻辑支持任意深度的键数组,能自动生成对应的嵌套结构

内容的提问来源于stack exchange,提问作者Stūrainis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:27:25