@4kuper

Как создать структуру дерева из списка смежности?

spoiler
[
{
"SEQNR": 1,
"LEVEL": 1,
"OTYPE": "O",
"OBJID": 80100000,
"STEXT": "Предприятие",
"PDOWN": 2,
"VCOUNT": 6,
"PNEXT": 0,
"PUP": 0,
"PPREV": 0,
"PHONS": "",
"MOBNM": "",
"EMAIL": "",
"ADDRESS": ""
},
{
"SEQNR": 2,
"LEVEL": 2,
"OTYPE": "O",
"OBJID": 9999999,
"STEXT": "управление",
"PDOWN": 8,
"VCOUNT": 53,
"PNEXT": 3,
"PUP": 1,
"PPREV": 0,
"PHONS": "",
"MOBNM": "",
"EMAIL": "",
"ADDRESS": ""
},
{
"SEQNR": 8,
"LEVEL": 3,
"OTYPE": "O",
"OBJID": 5555555555,
"STEXT": "Текст",
"PDOWN": 116,
"VCOUNT": 34,
"PNEXT": 9,
"PUP": 2,
"PPREV": 0,
"PHONS": "",
"MOBNM": "",
"EMAIL": "",
"ADDRESS": ""
},
{
"SEQNR": 116,
"LEVEL": 4,
"OTYPE": "S",
"OBJID": 80315918,
"STEXT": "Программист",
"PDOWN": 1077,
"VCOUNT": 1,
"PNEXT": 117,
"PUP": 8,
"PPREV": 0,
"PHONS": "9379992",
"MOBNM": "",
"EMAIL": "",
"ADDRESS": "Адрес"
},
{
"SEQNR": 1077,
"LEVEL": 5,
"OTYPE": "P",
"OBJID": "11111111",
"STEXT": "вася пупкин",
"PDOWN": 0,
"VCOUNT": 0,
"PNEXT": 0,
"PUP": 116,
"PPREV": 0,
"PHONS": "",
"MOBNM": "",
"EMAIL": "mail@mail",
"ADDRESS": ""
} ]


Есть json, его нужно сделать древовидным, есть признаки по которым определяется сколько в ветке зависимостей.
function list_to_tree(list) {
    var map = {}, node, roots = [], i;
    for (i = 0; i < list.length; i += 1) {
        map[list[i].OBJID] = i; // initialize the map
        list[i].PNEXT = []; // initialize the children
    }
    for (i = 0; i < list.length; i += 1) {
        node = list[i];
        if (node.PUPId !== "0") {
            // if you have dangling branches check that map[node.parentId] exists
            list[map[node.PUPId]].PNEXT.push(node);
        } else {
            roots.push(node);
        }
    }
    return roots;
}

пытался сделать так но не получается, помогите подскажите где не прав. спасибо за любые подсазки
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 1
john36allTa
@john36allTa
alien glow of a dirty mind
PUPID правда не нашел в структуре (spoiler == source?)
function list_to_tree(list) {
	return list.map( (v,i,a) =>{
		v.OBJID = i; // оно надо?
		v.PNEXT = []; // у нодов тоже должно быть?
		if (v.PUPID && v.PUPID > 0) a[v.PUPID].PNEXT.push(v);
		else return v;
	}).filter(v=>v);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы