Javascript 嵌套字典到字符串列表-typeScript

Javascript 嵌套字典到字符串列表-typeScript,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个嵌套字典,我想把它转换成字符串列表。 例如 我有以下意见: var group = { '5': { '1': { '1': [1,2,3], '2': [1] }, '2':{ '1': [2,4], '2': [1] } }, '1': { '1':{ '1':[

我有一个嵌套字典,我想把它转换成字符串列表。 例如 我有以下意见:

var group = {
    '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]
        }
    }
};
我想要这个输出:

a = ["5.1.1.1","5.1.1.2","5.1.1.3"..... "1.2.1.3"]
我从这个递归函数开始:

function printValues(obj) {
    for (var key in obj) {
    console.log(key)
        if (typeof obj[key] === "object") {
            printValues(obj[key]);   
        } else {
            console.log(obj[key]);    
        }
    }
}

但是t还不起作用。

您可以采取迭代和递归的方法,首先获取嵌套最多的项,然后构建所需的字符串

它是如何工作的

它从对象中获取所有条目(键/值对),并将扩展的数组推送到结果集

用于展开的数组为

  • 值或值的数组

  • 以对象
    v
    为参数再次调用函数的数组

这两个数组都通过从对象中获取键
k
,并从数组中获取一个项来映射,以获得想要的样式
n.m

例如,以一个子
{1:[2,4],2:[1]}
对象为例,获取一个键/值数组

[
    [1, [2, 4]],
    [2, [1]]
]
这是
reduce
第一次迭代的结果。顺序是从内部进行的逻辑运行:

  • 是的,它是一个数组
  • [2,4]
    ,
  • 将此值与
    k
    1
    一起映射
  • 获取
    ['1.2','1.4']
    ,
  • 将此阵列展开,然后
  • 将每个元素作为参数推送
  • 然后进行第二个循环并获得
    ['1.2','1.4','2.1']
    。 此结果作为
    getPaths
    中的值,并用每个字符串前面的实际键进行映射

    结果是由a构建,以获得最内部的数组,并将键放在每个项的前面

    函数getPaths(对象){
    返回Object.entries(Object).reduce((r[k,v])=>{
    r、 push(…(Array.isArray(v)?v:getPaths(v)).map(l=>`${k}.${l}`);
    返回r;
    }, []);
    }
    变量组={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]},
    结果=获取路径(组);
    控制台日志(结果)
    
    。作为控制台包装{max height:100%!important;top:0;}
    您可以使用
    对象。项
    与此递归函数:

    function printValues(obj) {
        for (var key in obj) {
        console.log(key)
            if (typeof obj[key] === "object") {
                printValues(obj[key]);   
            } else {
                console.log(obj[key]);    
            }
        }
    }
    
    var组={
    '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]
    }
    }
    };
    设r=[]
    const getpath=(p,v)=>{
    if(数组isArray(v)){
    v、 forEach(e=>r.push([…p,e].join('.'))
    }否则{
    Object.entries(v.forEach([k,v])=>getpath([…p,k],v))
    }
    }
    GetPath([],组)
    
    console.log(r)
    感谢您的工作。但是你能解释一下这个函数是如何工作的吗?很难理解…@YossiMenasherov,请看编辑。现在我想创建一个函数来获取路径(如5.1.1.1等),并返回一个嵌套字典。你能帮我吗?谢谢现在,我希望创建一个函数来获取路径(如5.1.1.1等)并返回嵌套字典。你能帮我吗?谢谢@我不知道你的意思。创建一个问题,然后将我链接到它:)