我有一些数据,它是:
数据是平面的,我需要将其转换为类似这样的形式:
“我认为上面是有效的”?
“我非常迷茫,不知道如何做。我会展示我的努力,但我不确定我的方法是否正确。”
我想我把它搞砸了。在评论中,我放了一个**来解释由于JavaScript不能通过引用传递而导致它无法工作,但是经过进一步阅读,我认为这不正确,因为我正在传递的是对象,而对象是按引用传递的?
< p > < em >编辑
var currentData = [
{'ticket':'CAP', 'child':'CT-1'},
{'ticket':'CAP', 'child':'CT-2'},
{'ticket':'CT-1', 'child':'CT-1-A'},
{'ticket':'CT-1', 'child':'CT-1-B'}
];
数据是平面的,我需要将其转换为类似这样的形式:
{
'ticket': 'CAP',
children : [{
'ticket' : 'CT-1',
'children' : [{
'ticket' : 'CT-1-A',
'children' : []
}, {
'ticket' : 'CT-1-B',
'children' : []
}],
[{
'ticket' : 'CT-2',
'children' : []
}]
}]
}
“我认为上面是有效的”?
“我非常迷茫,不知道如何做。我会展示我的努力,但我不确定我的方法是否正确。”
var currentData = [{'ticket':'cap', 'child':'CT-1'},{'ticket':'cap', 'child':'CT-2'}, {'ticket':'CT-1', 'child':'CT-1-A'},{'ticket':'CT-1', 'child':'CT-1-B'}];
var newList = [];
function convert(list){
if (newList.length <= 0){
var child = [];
var emptyChild = [];
child.push({'ticket': list[0].child, 'child': emptyChild });
newList.push({'ticket': list[0].ticket, 'children' : child});
list.splice(0,1);
} // the if statement above works fine
for(var i = 0; i < list.length; i++) {
var ticket = list[i].ticket;
for(var j = 0; j < newList.length; j++) {
if (newList[j].ticket == ticket){
var child;
var emptyChild = [];
child = {'ticket': list[i].child, 'child': emptyChild };
newList[j].children.push(child);
list.splice(i,1);
break;
} // the if above works
else{
var child2 = getFromChildren(ticket, newList, list[i]); // child2 is Always null, even if getFromChildren returns an object
newList[j].children.push(child2);
list.splice(i,1);
break;
}
}
}
if (list.length > 0){
convert(list);
}
}
function getFromChildren(ticket, list, itemToAdd){
if (list == null || list[0].children == null)
return;
for(var i = 0; i < list.length; i++) {
if (list[i] == null)
return;
if (list[i].ticket == ticket){
list[i].child.push(itemToAdd.child); // ** can't do this, javascript passes by value, not by reference :(
} else{
getFromChildren(ticket, list[i].children, itemToAdd);
}
}
}
convert(currentData);
很遗憾,用currentData
显示的数据也不总是从根开始
children
属性被设置为null
,而另一个被设置为空数组[]
。 - ibrahim mahrir]}
了吧? - doubleOrtvar obj = { 'ticket': 'CAP', children : [{ 'ticket' : 'CT-1', children : [{ 'ticket' : 'CT-1-A', 'children' : [] }, { 'ticket' : 'CT-1-B', 'children' : [] }] }, { 'ticket' : 'CT-2', children : [] } ] };
? - doubleOrt