如何将包含对象路径和值的字符串转换为对象?
How can I convert a string containing object paths and values to an object?
我想将 'a|b|c', val1
和 'a|d', val2
形式的字符串转换为 {a: {b : {c : 'val1'}, d: 'val2'}}
形式的嵌套对象。我尝试了以下 -
const path2Obj = (path, value) => {
const obj = {};
const pathComps = path.split('|').reverse();
pathComps.forEach((comp, ind) => {
if (ind) {
obj[comp] = obj;
} else {
obj[comp] = value;
}
});
return obj;
};
console.log(path2Obj('a|b|c', 'val1'));
但它记录 <ref *1> { c: 'val1', b: [Circular *1], a: [Circular *1] }
。有什么想法吗?
我的问题的背景
我正在将其结构在运行前未知的嵌套对象存储到 redis database. Redis does not appear to support nested objects natively so I first convert the them to path / value pairs of strings and save them as hashes。这可行,但我需要一种方法将它们转换回对象
您基本上可以使用 reduce
,遍历您使用 split
创建的路径数组,然后 return 对象中的值(如果存在),否则添加值 (新的嵌套对象或值参数)。
const obj = {}
const path2Obj = (path, value, obj) => {
path.split('|').reduce((r, e, i, arr) => {
return r[e] || (r[e] = i === arr.length - 1 ? value : {})
}, obj)
};
path2Obj('a|b|c', 'val1', obj)
path2Obj('a|d', 'val2', obj)
console.log(obj)
我想将 'a|b|c', val1
和 'a|d', val2
形式的字符串转换为 {a: {b : {c : 'val1'}, d: 'val2'}}
形式的嵌套对象。我尝试了以下 -
const path2Obj = (path, value) => {
const obj = {};
const pathComps = path.split('|').reverse();
pathComps.forEach((comp, ind) => {
if (ind) {
obj[comp] = obj;
} else {
obj[comp] = value;
}
});
return obj;
};
console.log(path2Obj('a|b|c', 'val1'));
但它记录 <ref *1> { c: 'val1', b: [Circular *1], a: [Circular *1] }
。有什么想法吗?
我的问题的背景
我正在将其结构在运行前未知的嵌套对象存储到 redis database. Redis does not appear to support nested objects natively so I first convert the them to path / value pairs of strings and save them as hashes。这可行,但我需要一种方法将它们转换回对象
您基本上可以使用 reduce
,遍历您使用 split
创建的路径数组,然后 return 对象中的值(如果存在),否则添加值 (新的嵌套对象或值参数)。
const obj = {}
const path2Obj = (path, value, obj) => {
path.split('|').reduce((r, e, i, arr) => {
return r[e] || (r[e] = i === arr.length - 1 ? value : {})
}, obj)
};
path2Obj('a|b|c', 'val1', obj)
path2Obj('a|d', 'val2', obj)
console.log(obj)