Сортировка массивов / объектов - PullRequest
1 голос
/ 24 февраля 2020

Таким образом, есть объект JSON, в нем есть список массивов с объектами, такими как AssortmentID и AssortmentParentID с именем, AssortimentID с AssortmentParentID 000-000-000 являются папками, AssortmentID с AssortmentParentID другого AssortmentID являются дочерними элементами этой папки. Как мне сначала вывести папки, а потом дочерние в каждой папке (родительской). Пример:

The HTTP Request:
const url = "\url";
async function getAssortList() {
  const response = await fetch(url);
  const data = response.json();
  const { Assortments } = data;

for (let i = 0; i < Assortments.length; i++) {
  const assortItem = Assortments[i];
  ...(where I'm stuck)...

/////////////////////////////////////

The JSON Response:
Assortments: [
{ 
  "AssortmentID": 123-123-123-123,
  "AssortmentParentID": 000-000-000
  "Name": "I am a parent"
},
{
  "AssortmentID": 111-111-111-111,
  "AssortmentParentID": 123-123-123-123,
  "Name": "I am a kid"
}


Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

попробуйте следующий код в javascript

Assortments.sort(
  function (a, b) {  
    var x = a.AssortmentParentID.toLowerCase();
    var y = b.AssortmentParentID.toLowerCase();
    if (x < y) {return -1;}
    if (x > y) {return 1;}
    return 0;
})

, по этому вам будет отсортирован массив на AssortmentParentID

0 голосов
/ 24 февраля 2020

Вроде, решил сам. Еще есть чем заняться.

const parents = []; // created a new array that I'll push objects into later.
for (let i = 0; i < Assortments.length; i++) {
  if (Assortments[i].AssortimentParentID == "000-000-000") {
    parents.push(Assortments[i]);
  }
}
for (let i = 0; i < parents.length; i++) {
  parents.sort((a, b) => a.Name.localeCompare(b.Name)); // sort them alphabetically
}

Если кто-то может показать мне, как сделать то же самое, используя filter / find / et c., Это было бы здорово. Спасибо!

ОБНОВЛЕНИЕ: удалось отсортировать родителей, вывести их в DOM, вот код:

for (let x in parents) {
  parents[x].isFolder === false ? parents.push( parents.splice(x,1)[0] ) : 0;
}
let assortItem = parents[i].Name;
let subnavList = document.createElement("li");
let subnavLink = document.createElement("a");
subnavList.classList.add("subnav-list");
subnavList.appendChild(subnavLink);
subnavLink.classList.add("subnav-link");
subnavLink.innerHTML += assortItem;
item.appendChild(subnavList);
0 голосов
/ 24 февраля 2020

Может быть, это вам поможет.

Assortments.reduce((acc, curr) => {
    let parent = curr["AssortmentParentID"];
    if(acc[parent]){
        acc[parent].push(curr)
    }
    else{
        acc[parent] = [curr]
    }
return acc;
}, {})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...