Как упорядочить массив объектов по разным свойствам? - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно заказать массив, где элементы являются объектами. Я хочу заполнить выпадающий список в определенном порядке

[{ id: 1, name: "Country", parent: null, level: 0 }, 
{ id: 48, name: "Village1", parent: 16, level: 2 }, 
{ id: 17, name: "City1", parent: 1, level: 1 }, 
{ id: 15, name: "Village4", parent: 16, level: 2 }, 
{ id: 61, name: "City2", parent: 1, level: 1 }, 
{ id: 16, name: "City3", parent: 1, level: 1 }, 
{ id: 85, name: "City6", parent: 1, level: 1 }, 
{ id: 31, name: "Village2", parent: 77, level: 2 }, 
{ id: 76, name: "City4", parent: 1, level: 1 }, 
{ id: 77, name: "City5", parent: 1, level: 1 }, 
{ id: 79, name: "Village3", parent: 77, level: 2 }]

То, чего я пытаюсь достичь, это получить раскрывающийся список, в котором сначала отображаются Страна (родительский ноль), затем ее дети, но сразу же, если у этих детей также есть дети, они должны отображаться внизу, вроде:
- Страна
- Город1
- City2
- City3
- Village1
- Village2
- City4
, , , И так далее ..

Кто-нибудь может мне помочь? Я действительно борюсь здесь ...

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Я думаю, что вы хотите создать дерево, следующий ответ наполовину, я думаю, это поможет вам.

let arrOfObjectData = [{ id: 1, name: "Country", parent: null, level: 0 },
{ id: 48, name: "Village1", parent: 16, level: 2 },
{ id: 17, name: "City1", parent: 1, level: 1 },
{ id: 15, name: "Village4", parent: 16, level: 2 },
{ id: 61, name: "City2", parent: 1, level: 1 },
{ id: 16, name: "City3", parent: 1, level: 1 },
{ id: 85, name: "City6", parent: 1, level: 1 },
{ id: 31, name: "Village2", parent: 77, level: 2 },
{ id: 76, name: "City4", parent: 1, level: 1 },
{ id: 77, name: "City5", parent: 1, level: 1 },
{ id: 79, name: "Village3", parent: 77, level: 2 }];

let allParent = arrOfObjectData.filter((ele) => ele.parent == 1);
let treeArrOfObject = [];
allParent.forEach(element => {
	let findChild = arrOfObjectData.filter((elm) => elm.parent == element.id);
	treeArrOfObject.push({ parent: findChild, children: findChild });
});
console.log(treeArrOfObject);
0 голосов
/ 29 мая 2019

Вы можете сначала добавить всех детей в свойство их родителя.

[
  {
    id: 1, 
    name: "Country", 
    children:[{id: 17, name: "Village1", parent: 1, level: 1}]
  },    
  {
    id: 2, 
    name: "Country2", 
    children:[{id: 19, name: "Village2", parent: 2, level: 1}]
  },    
]

Затем выполните цикл по родителям, выведите их и вложите цикл, проходящий по дочерним элементам каждого родителя, и выведите их

parents.forEach((parent) => {
  //output parent
  parent.children.forEach((child) => {
  //output child
  });
});
0 голосов
/ 29 мая 2019

Это должно сделать это:

let finalArray = [];
originalArray.map(x => {
   if(x.name === 'Country') {finalArray[0] = x}
   if(x.name === 'City1') {finalArray[1] = x}
   if(x.name === 'City2') {finalArray[2] = x}
   if(x.name === 'City3') {finalArray[3] = x}
   if(x.name === 'Village1') {finalArray[4] = x}
   if(x.name === 'Village2') {finalArray[5] = x}
   if(x.name === 'City4') {finalArray[6] = x}
 })
...