"# 题目 info: { a.b: 1, c: 2 },转化为 info2:{ a: { b: 1 }, c: 2 }
在前端开发中,我们经常需要对数据进行处理和转换,以满足不同的需求。本文将介绍如何将一个对象的属性路径表示方式从 "a.b" 转化为嵌套对象的形式。
问题描述
我们有一个对象 info,它的属性路径使用点号 . 连接,例如 a.b。我们的目标是将这种属性路径的表示方式转化为嵌套对象的形式。具体而言,我们要将 { a.b: 1, c: 2 } 转化为 { a: { b: 1 }, c: 2 }。
解决方案
为了解决这个问题,我们可以使用递归的方式来遍历原始对象,并根据属性路径生成嵌套对象。
首先,我们创建一个辅助函数 convertPathToObject,该函数接受三个参数:原始对象 obj、属性路径 path 和属性值 value。
function convertPathToObject(obj, path, value) {
const pathArray = path.split('.');
const lastKey = pathArray.pop();
let currentObj = obj;
pathArray.forEach(key => {
if (!currentObj[key]) {
currentObj[key] = {};
}
currentObj = currentObj[key];
});
currentObj[lastKey] = value;
}
然后,我们创建主函数 convertInfo,该函数接受一个参数 info,表示原始对象。在主函数中,我们遍历原始对象的所有属性,对每个属性调用 convertPathToObject 函数进行转换。
function convertInfo(info) {
const info2 = {};
for (const key in info) {
if (info.hasOwnProperty(key)) {
convertPathToObject(info2, key, info[key]);
}
}
return info2;
}
最后,我们可以调用 convertInfo 函数来进行转换。
const info = { 'a.b': 1, c: 2 };
const info2 = convertInfo(info);
console.log(info2);
// 输出: { a: { b: 1 }, c: 2 }
总结
通过上述的代码实现,我们可以将属性路径表示方式从 "a.b" 转化为嵌套对象的形式。这种转化可以帮助我们更方便地处理和操作数据。在实际的前端开发中,我们可以根据具体的需求来灵活运用这种转化方式,提高开发效率。"