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等)并返回嵌套字典。你能帮我吗?谢谢@我不知道你的意思。创建一个问题,然后将我链接到它:)