{
"id": "1",
"parentId": "",
"children": [
{
"id": "1.1",
"parentId": "1",
},
{
"id": "1.2",
"parentId": "1",
},
{
"id": "1.3",
"parentId": "1",
},
{
"id": "1.4",
"parentId": "1",
},
{
"id": "1.1.1",
"parentId": "1.1",
},
{
"id": "1.1.2",
"parentId": "1.1",
},
{
"id": "1.1.3",
"parentId": "1.1",
},
{
"id": "1.1.1.1",
"parentId": "1.1.1",
},
{
"id": "1.1.1.2",
"parentId": "1.1.1",
},
]
}
json应该以树格式排序。如果object的parentid与另一个对象的id匹配,那么对象将在object下面,等等到第n级。
预期输出应该是:
{
"id": "1",
"parentId": "",
"children": [
{
"id": "1.1",
"parentId": "1",
"children": [
{
"id": "1.1.1",
"parentId": "1.1",
"children": [
{
"id": "1.1.1.1",
"parentId": "1.1.1",
"children": []
},
{
"id": "1.1.1.2",
"parentId": "1.1.1",
"children": []
},
]
},
{
"id": "1.1.2",
"parentId": "1.1",
"children": []
},
{
"id": "1.1.3",
"parentId": "1.1",
"children": []
},
]
},
{
"id": "1.2",
"parentId": "1",
"children": []
},
{
"id": "1.3",
"parentId": "1",
"children": []
},
{
"id": "1.4",
"parentId": "1",
"children": []
},
]
}
我试过但它只显示3级。
$( document ).ready(function() {
var json = JSON.parse(`{
"id": "1",
"parentId": "",
"children": [
{
"id": "1.1",
"parentId": "1"
},
{
"id": "1.2",
"parentId": "1"
},
{
"id": "1.3",
"parentId": "1"
},
{
"id": "1.4",
"parentId": "1"
},
{
"id": "1.1.1",
"parentId": "1.1"
},
{
"id": "1.1.2",
"parentId": "1.1"
},
{
"id": "1.1.3",
"parentId": "1.1"
},
{
"id": "1.1.1.1",
"parentId": "1.1.1"
},
{
"id": "1.1.1.2",
"parentId": "1.1.1"
}
]
}`);
var dummyParnt = json.children;
var dummyChild = json.children;
var dataGrand= json;
var data=[];
var init = function() {
var children=[];
dataGrand.children=[];
var k,j=0;
for(var i in dummyParnt){
if(dummyParnt[i].parentId == json.id){
dataGrand.children[j] = dummyParnt[i];
dataGrand.children[j].children =[];
k=0;
for(var a in dummyChild){
if(dummyParnt[i].id == dummyChild[a].parentId){
dataGrand.children[j].children[k] = dummyChild[a];
k++;
}
}
j++;
}
}
console.log(dataGrand,"datagrand");
var tableHTML = '<table id="location" border=\'1\'></table>';
var trHTML = '';
trHTML += '<tr><td>' + dataGrand.id + '</td></td><td></td><td></tr>';
for(var i in dataGrand.children){
trHTML += '<tr><td></td><td>' + dataGrand.children[i].id + '</td></td><td></tr>';
for(var j in dataGrand.children[i].children){
trHTML += '<tr><td></td><td></td><td>' + dataGrand.children[i].children[j].id + '</td></tr>';
};
};
$('body').append(tableHTML);
$('#location').append(trHTML);
}
init();
});
<html>
<head>
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
</body>
</html>
答案 0 :(得分:0)
我只是写一个逻辑尝试它希望它按预期工作..
为此,您创建一个id数组并应用此函数进行排序 那个数组然后基于你可以推送的这个排序的id数组 将对象转换为新数组,这将是所需的输出。
1)获取ID的数组 - _.pluck(YOURLIST, 'id');
如果您不想使用underscore.js,则根据长度使用for循环for循环
var arrayOfIds = [];
function getLeaf(YOURLIST) {
for (i=0; i > YOURLIST.length; i++) {
arrayOfIds.push(YOURLIST[i].id);
for (j=0; j > YOURLIST[i].length; j++) {
arrayOfIds.push(YOURLIST[i][j].id);
return getLeaf(YOURLIST[i][j]); // <- recursive call
}
}
}
2)调用以下函数对上面创建的数组进行排序。
function compareAndSort(x, y) {
var xParts = x.split('.');
var yParts = y.split('.');
var max = xParts.length > yParts.length ? yParts.length : xParts.length;
for (int i = 0; i < max; i++) {
var xInt = parseInt(xParts[i]);
var yInt = parseInt(yParts[i]);
if (xInt < yInt) {
return -1;
}
if (yInt < xInt) {
return 1;
}
if (i == max -1) {
if (yParts.length > xParts.length) {
return -1;
}
}
}
return 0;
}
3)基于新排序的arrayList,通过基于id的排序列表推送对象,创建一个新的所需对象输出数组。