Javascript 需要重新排列JSON吗

Javascript 需要重新排列JSON吗,javascript,html,json,Javascript,Html,Json,我需要按照以下方式重新排列我的JSON数组。在输出中,我需要id作为键,对象本身作为它的值 输入: [ { "id": "1", "sub": [ { "id": "1-1", "sub": [ { "id": "1-1-1", "su

我需要按照以下方式重新排列我的JSON数组。在输出中,我需要
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);