首页 > 解决方案 > Javascript - 来自用点分隔的字符串数组的嵌套字典

问题描述

我必须将数组转换嵌套字典。

如果我有一个字符串数组。每个字符串由点分隔的数字组合而成,每个数字表示翻译字典中的一个键。(最后一个数字除外)

例如

我有这个数组: array = ["5.1.1.1","5.1.1.2","5.1.1.3",..."5.2.1.2","5.2.1.4"..."1.1.1.1"..."1.2.1.3"]

我需要输出是这样的:

var output = {
    '5': {
        '1': {
            '1': [1,2,3],
            '2': [1]
        },
        '2':{
            '1': [2,4],
            '2': [1]
        }
    },
    '1': {
        '1':{
            '1':[1,2,5],
            '2':[1]
        },
        '2':{
            '1':[2,3]
        }
    }
};

我有一个相反的函数,它得到一个嵌套字典,她的输出是一个数组。

链接:https ://stackoverflow.com/a/59191937/7593555

感谢您的帮助:)。

标签: javascriptangulartypescript

解决方案


您可以使用递归函数,使用上一个问题的输出:

const arr = [
  "1.1.1.1",
  "1.1.1.2",
  "1.1.1.5",
  "1.1.2.1",
  "1.2.1.2",
  "1.2.1.3",
  "5.1.1.1",
  "5.1.1.2",
  "5.1.1.3",
  "5.1.2.1",
  "5.2.1.2",
  "5.2.1.4",
  "5.2.2.1"
]

const map = {}
const addProp = ([k, ...r], map) => {
  if (r.length === 1) return map[k] ? map[k].push(r[0]) : map[k] = r
  if (map[k]) {
    addProp(r, map[k])
  } else {
    map[k] = {}
    addProp(r, map[k])
  }
}

arr.map(e => e.split('.')).forEach(e => addProp(e, map))

console.log(map)


推荐阅读