基于键数组与目标值创建嵌套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
相关产品推荐
相关产品推荐

