题目 info: { a.b: 1, c: 2 }, 转化为 info2:{ a: { b: 1 }, c: 2 }

88 阅读2分钟

"# 题目 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" 转化为嵌套对象的形式。这种转化可以帮助我们更方便地处理和操作数据。在实际的前端开发中,我们可以根据具体的需求来灵活运用这种转化方式,提高开发效率。"