问题描述
我有一个结构如下的对象:
[
{
"ID": 34,
"parent": 0,
"title": "Level 1 A",
"children": []
},
{
"ID": 35,
"parent": 0,
"title": "Level 1 B",
"children": [
{
"ID": 36,
"parent": 35,
"title": "Level 2 A",
"children": [
{
"ID": 37,
"parent": 36,
"title": "Level 3 A",
"children": []
},
{
"ID": 38,
"parent": 36,
"title": "Level 3 B",
"children": []
}
]
}
]
}
]
我试图遍历它,并使“ title”成为键,所以我最终得到了这一点:
[
{
"Level 1 A": {
"ID": 34,
"parent": 0,
"title": "Level 1 A",
"children": []
}
},
{
"Level 1 B": {
"ID": 35,
"parent": 0,
"title": "Level 1 B",
"children": [
{
"Level 2 A": {
"ID": 36,
"parent": 35,
"title": "Level 2 A",
"children": [
{
"Level 3 A": {
"ID": 37,
"parent": 36,
"title": "Level 3 A",
"children": []
}
},
{
"Level 3 B": {
"ID": 38,
"parent": 36,
"title": "Level 3 B",
"children": []
}
}
]
}
}
]
}
}
]
我尝试了类似的方法,但是它没有通过子级数组,因此仅更新了1级元素:
for (var i = 0, l = response.length; i < l; i++) {
map[response[i].title] = response[i];
}
我相信我需要使用一些递归,但是我很难弄清楚如何用Javascript完成此工作。 在此先感谢您的任何建议。
1楼
您需要将代码更新为以下内容
function updateArray(arr) {
var updatedResponse = [];
for (var i = 0, l = arr.length; i < l; i++) {
var obj = {};
if(arr[i].children !== undefined) {
arr[i].children = updateArray(arr[i].children);
}
obj[arr[i].title] = arr[i];
updatedResponse.push(obj);
}
return updatedResponse;
}
var updatedArray = updateArray(response);
供参考
2楼
要遍历多维数组,您需要多个嵌套的for
循环。
for(var i = 0, l = response.length; i < l; i ++){
for(var j = 0, k = response.length; j < k; j ++){
//Do some code here
}
}
一个通用规则是对于数组中的每个维,您都需要另一个循环。