Javascript 需要重新排列JSON吗
我需要按照以下方式重新排列我的JSON数组。在输出中,我需要Javascript 需要重新排列JSON吗,javascript,html,json,Javascript,Html,Json,我需要按照以下方式重新排列我的JSON数组。在输出中,我需要id作为键,对象本身作为它的值 输入: [ { "id": "1", "sub": [ { "id": "1-1", "sub": [ { "id": "1-1-1", "su
id
作为键,对象本身作为它的值
输入:
[
{
"id": "1",
"sub": [
{
"id": "1-1",
"sub": [
{
"id": "1-1-1",
"sub": []
}
]
},
{
"id": "1-2",
"sub": []
}
]
},
{
"id": "2",
"sub": []
},
{
"id": "3",
"sub": [
{
"id": "3-1",
"sub": []
}
]
}
]
输出:
{
"1": {
"id": "1",
"sub": {
"1-1": {
"id": "1-1",
"sub": {
"1-1-1": {
"id": "1-1-1",
"sub": []
}
}
},
"1-2": {
"id": "1-2",
"sub": []
}
}
},
"2": {
"id": "2",
"sub": []
},
"3": {
"id": "3",
"sub": {
"3-1": {
"id": "3-1",
"sub": []
}
}
}
}
我尝试使用递归,但它正在创建循环对象
function rearrange(obj){
obj[obj.id] = obj;
for(var j = 0; j < obj.sub.length; j++){
obj.sub[j][obj.sub[j].id] = obj.sub[j];
if(obj.sub[j].sub.length > 0){
rearrange(obj.sub[j]);
}
}
}
使用数组
map
函数。map()
var数组=[{
“id”:“1”,
“sub”:[{
“id”:“1-1”,
“sub”:[{
“id”:“1-1-1”,
“sub”:[]
}]
}, {
“id”:“1-2”,
“sub”:[]
}]
}, {
“id”:“2”,
“sub”:[]
}, {
“id”:“3”,
“sub”:[{
“id”:“3-1”,
“sub”:[]
}]
}];
功能doMap(arr){
var输出=arr.map(功能(d){
var ob={};
如果(d.sub)
d、 sub=doMap(d.sub);
ob[d.id]=d;
返回ob;
});
返回输出;
};
警报(JSON.stringify(doMap(数组))代码>乍一看,我建议创建一个新的普通对象,只需迭代JSON,在新对象中创建所需的结构,而不是尝试“更新”输入对象。你的递归函数中没有一个破坏性语句Hi Gilsha,谢谢你的回答。在第二级,它正在创建键为undefined
的对象。我以前没用过map
,所以我想弄清楚。你好,本杰明。我无法复制你提到的问题。我在答案中添加了格式化输出。这不是预期的产出吗?我找不到任何键未定义的对象。
rearrange(myobj);