javascript - 需要重新排列 JSON

标签 javascript html json

我需要按以下方式重新排列我的 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]);
    }
  }
}

//调用

rearrange(myobj);

最佳答案

使用数组map函数。 map() 方法创建一个新数组,其中包含对该数组中每个元素调用所提供函数的结果。

var array = [{
    "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": []
    }]
}];

function doMap(arr) {
    var output = arr.map(function(d) {
        var ob = {};
        if (d.sub)
            d.sub = doMap(d.sub);
        ob[d.id] = d;
        return ob;
    });
    return output;
};

alert(JSON.stringify(doMap(array)));

获得的输出

[{
    "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": []
            }
        }]
    }
}]

关于javascript - 需要重新排列 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32987448/

相关文章:

javascript - javascript中的动态对象文字?

javascript - jQuery.parseJSON 单引号与双引号

javascript - 在 Angular 中设置 Angular Web 组件的样式

javascript - 如何在正则表达式中传递变量

Android RSS阅读器描述数据获取错误

html - 样式 ="display:none"的 CSS 替代品

javascript - 如何在 JavaScript 中删除 JSON 字符串中的第一个和最后一个双引号?

c# - HttpClient 不支持 PostAsJsonAsync 方法 C#

javascript - Angular UI Router,路由解析破坏刷新按钮

javascript - 从两端调整一个div的大小