如何在JavaScript中从指定格式字符串构建嵌套对象?
解决方案
这问题我之前处理类似配置字符串的时候碰到过,其实用字符串拆分加简单循环就能轻松实现,给你写个具体的JavaScript实现:
首先,我们可以把整个过程拆成三步:拆分键值对、拆分嵌套键路径、逐层构建对象。
完整代码示例
const str = "class1.class2.class3=d23dasdasd23dasdasdas"; // 1. 拆分键路径和对应的值 const [keyPath, value] = str.split('='); // 2. 将嵌套的键路径拆分为单个键的数组 const keys = keyPath.split('.'); // 3. 逐步构建嵌套对象 const result = {}; let currentLevel = result; for (let i = 0; i < keys.length; i++) { const currentKey = keys[i]; // 如果是最后一个键,直接赋值 if (i === keys.length - 1) { currentLevel[currentKey] = value; } else { // 否则创建新的空对象,进入下一层级 currentLevel[currentKey] = {}; currentLevel = currentLevel[currentKey]; } } console.log(result); // 输出结果:{ class1: { class2: { class3: 'd23dasdasd23dasdasdas' } } }
代码解释
- 拆分键值对:用
split('=')把原字符串切成两部分,左边是嵌套的键路径,右边是对应的值,用解构赋值直接拿到这两个部分。 - 拆分键路径:再用
split('.')把键路径拆成单个键的数组,比如['class1', 'class2', 'class3']。 - 构建嵌套对象:用
currentLevel变量跟踪当前正在操作的对象层级,遍历每个键:- 如果是最后一个键,就把值直接赋给当前层级的这个键;
- 如果不是最后一个,就创建一个新的空对象,然后把
currentLevel指向这个新对象,继续往下构建下一层。
可复用函数版本
如果需要多次处理这类字符串,可以封装成一个函数:
function convertStrToNestedObj(inputStr) { const [keyPath, value] = inputStr.split('='); const keys = keyPath.split('.'); const result = {}; let currentLevel = result; keys.forEach((key, index) => { if (index === keys.length - 1) { currentLevel[key] = value; } else { currentLevel[key] = {}; currentLevel = currentLevel[key]; } }); return result; } // 使用示例 const targetObj = convertStrToNestedObj("class1.class2.class3=d23dasdasd23dasdasdas"); console.log(targetObj);
如果你的值需要转换为数字、布尔等类型,可以在赋值前加个类型判断逻辑,不过按照你给出的需求,直接赋值字符串就足够啦。
内容的提问来源于stack exchange,提问作者Aumy
相关产品推荐
相关产品推荐

