簡體   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