如何将点分隔字符串转换为任意层级的嵌套哈希
点分隔字符串转嵌套哈希通用实现方案
核心思路
- 将输入的点分隔字符串用
.切割为层级键数组,例如foo.bar.baz会被切割为['foo', 'bar', 'baz'] - 倒序遍历键数组,从最内层开始逐层向外包裹对象/哈希结构,最终将输入值放在最内层的键对应位置
- 天然适配任意长度的合法点分隔字符串,不受层级数量限制
JavaScript 实现
function buildNestedObject(keyStr, value) { const keys = keyStr.split('.'); return keys.reduceRight((nested, key) => ({ [key]: nested }), value); } // 测试用例 console.log(buildNestedObject('foo.bar.baz', 'qux')) // 输出:{ foo: { bar: { baz: 'qux' } } } console.log(buildNestedObject('foo.bar.baz.qux', 123)) // 输出:{ foo: { bar: { baz: { qux: 123 } } } }
Python 实现
def build_nested_dict(key_str: str, value) -> dict: keys = key_str.split('.') nested = value for key in reversed(keys): nested = {key: nested} return nested # 测试用例 print(build_nested_dict('foo.bar.baz', 'qux')) # 输出:{'foo': {'bar': {'baz': 'qux'}}} print(build_nested_dict('foo.bar', 'test')) # 输出:{'foo': {'bar': 'test'}}
Ruby 实现
def build_nested_hash(key_str, value) key_str.split('.').reverse.inject(value) { |acc, key| { key.to_sym => acc } } end # 测试用例 p build_nested_hash('foo.bar.baz', 'qux') # 输出:{:foo=>{:bar=>{:baz=>"qux"}}}
如果需要支持合并到已存在的对象/哈希、过滤空键等特殊场景,在上述代码基础上补充对应入参校验和遍历逻辑即可。
内容的提问来源于stack exchange,提问作者dya26
相关产品推荐
相关产品推荐

