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

如何从点分隔的键字符串生成嵌套JSON结构?

按点分隔键生成嵌套JSON结构

核心思路

将点分隔的键字符串拆分为键数组,通过迭代方式逐层构建嵌套对象,最终把currValue存入最内层的value属性中。

实现方法

方法1:倒序循环构建(从内到外)

先创建最内层的{value: currValue},再逐层向外包裹新对象:

function buildNestedObject(keys, currValue) {
  const keyArray = keys.split('.');
  let result = { value: currValue };
  
  for (let i = keyArray.length - 1; i >= 0; i--) {
    result = { [keyArray[i]]: result };
  }
  
  return result;
}

// 使用示例
const currValue = 1.2;
const keys = 'global.fontsize.bodyscale';
const nestedObj = buildNestedObject(keys, currValue);
console.log(JSON.stringify(nestedObj, null, 2));

方法2:用reduceRight简化代码

借助数组的reduceRight方法从末尾迭代,代码更简洁:

function buildNestedObject(keys, currValue) {
  return keys.split('.').reduceRight((acc, key) => {
    return { [key]: acc };
  }, { value: currValue });
}

// 使用示例
const currValue = 1.2;
const keys = 'global.fontsize.bodyscale';
console.log(JSON.stringify(buildNestedObject(keys, currValue), null, 2));

方法3:正序循环构建(从外到内)

通过指针跟踪当前层级,从外层开始逐层创建嵌套结构:

function buildNestedObject(keys, currValue) {
  const keyArray = keys.split('.');
  const result = {};
  let currentLayer = result;
  
  // 遍历到倒数第二个键,逐层创建空对象
  for (let i = 0; i < keyArray.length - 1; i++) {
    const key = keyArray[i];
    currentLayer[key] = {};
    currentLayer = currentLayer[key];
  }
  
  // 为最后一个键添加包含value的对象
  currentLayer[keyArray[keyArray.length - 1]] = { value: currValue };
  
  return result;
}

// 使用示例
const currValue = 1.2;
const keys = 'global.fontsize.bodyscale';
console.log(JSON.stringify(buildNestedObject(keys, currValue), null, 2));

注意事项

  • 若keys为空字符串,可添加边界处理(比如直接返回{value: currValue})
  • 键包含特殊字符(如空格、符号)时,上述方法依然有效,因为用了ES6计算属性名语法[key]

内容的提问来源于stack exchange,提问作者U. Watt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:15:07