繁体   English   中英

将字符串数组转换为嵌套 Object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM