@chasovoy85

Как построить дерево из объектов в массиве JavaScrypt?

Есть массив с объектами, порядок может быть разный, нужно построить дерево. Родитель дочерних элементов дерева указанны в "key" который соответствует индексу "1" .
Например {"1":4,"3":0,"4":0,"key":2},{"1":5,"3":0,"4":0,"key":2} это дети {"1":2,"3":0,"4":0,"key":1}
Всё дерево всегда начинается с "key":0 - это главный элемент, вложенность может быть любая, порядок в массиве тоже.
Неделю пытаюсь сделать не получается.

pkp = [{"1":1,"3":128,"4":1,"key":0},{"1":2,"3":0,"4":0,"key":1},{"1":3,"3":0,"4":0,"key":1},{"1":4,"3":0,"4":0,"key":2},{"1":5,"3":0,"4":0,"key":2},{"1":6,"3":0,"4":0,"key":3},{"1":6,"3":0,"4":0,"key":3},{"1":7,"3":0,"4":0,"key":1}];
console.log(JSON.stringify(pkp));
var peremennaya = "0";

for (i = 0; i < pkp.length; i++) {
	if ("0" == pkp[i]["key"]) {
		peremennaya = pkp[i][1];
		addselect(peremennaya);
		console.log(pkp[i][1]);
	}
}

for (i = 0; i < pkp.length; i++) {
	if (peremennaya == pkp[i]["key"]) {
		var pr = pkp[i][1];
		console.log("главный    "+pr);
		pr1 = "_"+pr;
		addselect(pr1);
		recpribor(pr);
		
	}
}


function recpribor(pr, n) {
	for (h = 0; h < pkp.length; h++) {
		if (pr == pkp[h]["key"]) {
		var result;
			var pr = pkp[h][1];
			console.log("второй    "+pr);
			addselect(pr);
			recpribor(pr);
		}
	}
}
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
AngReload
@AngReload
Кратко о себе
function getTree(flatTree) {
	// node["1"] is node.index
	// node["key"] is node.parent.index

	flatTree.forEach(node => {
		const nodeIndex = node["1"];
		const nodeParentIndex = node["key"];
		
		node.parent = flatTree
			.find(someNode => someNode["1"] === nodeParentIndex);

		node.childrens = flatTree
			.filter(someNode => someNode["key"] === nodeIndex);

		node.siblings = flatTree
			.filter(someNode => someNode["key"] === nodeParentIndex && someNode !== node);
	});

	const rootNode = flatTree.find(obj => obj["1"] === 1);
	return rootNode;
}

const flatTree = [
	{"1": 1, "3": 128, "4": 1, "key": 0},
	{"1": 2, "3":   0, "4": 0, "key": 1},
	{"1": 3, "3":   0, "4": 0, "key": 1},
	{"1": 4, "3":   0, "4": 0, "key": 2},
	{"1": 5, "3":   0, "4": 0, "key": 2},
	{"1": 6, "3":   0, "4": 0, "key": 3},
	{"1": 6, "3":   0, "4": 0, "key": 3},
	{"1": 7, "3":   0, "4": 0, "key": 1}
];

console.log(getTree(flatTree));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы