【问题标题】:Javascript - nested dictionary from array of strings separated with dots [closed]Javascript - 来自用点分隔的字符串数组的嵌套字典[关闭]
【发布时间】:2019-12-17 16:12:26
【问题描述】:

我必须翻译一个数组嵌套字典。

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

例如

我有这个数组: 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

感谢您的帮助:)。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 您是否开始假设每个字符串每次都恰好有 4 个元素?我们不必担心“5.1.2”或“5.1.1.1.2”?

标签: javascript angular typescript


【解决方案1】:

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

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)

【讨论】:

  • 感谢您的帮助,但是,您的解决方案无法正常工作。您的输出字典不包含数组中的某些元素。例如 - 1.1.1.1 和 1.1.1.2 。字典只包含“1”:{“1”:{“1”:[“5”],而不是:“1”:{“1”:{“1”:[“1”,“2” , "5" ],
  • @YossiMenasherov 你确定吗?对我来说似乎工作正常。
猜你喜欢
  • 1970-01-01
  • 2011-11-30
  • 2015-03-19
  • 1970-01-01
  • 2017-04-17
  • 2019-08-23
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多