[英]Convert array of string to nested Object
我有一个字符串数组,我想转换为嵌套的 object,其中键是数组的值。 我尝试使用 reduce,但嵌套在最后一个 object 中的所有值都是数组中的最后一项。 你能帮助我吗? 谢谢!
let m = [
'1.',
'1.1.',
'1.2.',
'1.3.',
'1.4.',
'1.1.1.',
'1.1.2.',
'1.1.3.',
'1.2.1.',
'1.2.2.',
'1.3.1.',
'1.3.2.',
'1.3.3.',
'1.3.4.',
'1.4.1.',
'1.4.3.',
];
我想将此数组转换为嵌套的 object。
返回
{
"1":{
"1":{
"1":"1.1.1.",
"2":"1.1.2.",
"3":"1.1.3."
},
"2":{
"1":"1.2.1.",
"2":"1.2.2."
},
"3":{
"1":"1.3.1.",
"2":"1.3.2.",
"4":"1.3.4."
},
"4":{
"1":"1.4.1.",
"3":"1.4.3."
}
}
}
这是一个使用 reduce() 的工作示例。
let m = [ '1.', '1.1.', '1.2.', '1.3.', '1.4.', '1.1.1.', '1.1.2.', '1.1.3.', '1.2.1.', '1.2.2.', '1.3.1.', '1.3.2.', '1.3.3.', '1.3.4.', '1.4.1.', '1.4.3.', ]; const addToObj = (obj_, path, newData) => { const obj = typeof obj_ === 'string'? {}: obj_ // Special logic to cause a value at 1.2.3. to override a value at 1.2. if (path.length === 0) return newData const [head, ...tail] = path return {...obj, [head]: addToObj(obj[head] || {}, tail, newData), } } const res = m.reduce( (obj, path) => addToObj(obj, path.split('.').slice(0, -1), path), {} ) console.log(res)
它通过使用 addToObj function 来工作,它将 object 作为参数,进入该 object 的路径,以及该路径末尾需要的新值,它会返回一个新的 object 以及添加的新值。
addToObj() 中添加了特殊逻辑,以确保像1.2.3.
总是覆盖可能已放置在1.2.
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.