0

I have data. There are other data of the same type that have children in this data. I want to sort them all according to their 'id' fields, but I couldn't set up the algorithm scheme for it.

What I've tried:

const sortedData: [] = [];

function sortAscending(datas: Group[]) {
    sortedData.push(datas.sort((group1, group2) => group1.id - group2.id ));
    return sortedData;
}

With this code, I can only sort without children.

I tried to model the picture I wanted to describe: enter image description here

Note: The returned data will be mapped and used later.

Sample array:

    0:
      children: [{…}]
      id: 1
      name: "name1"
      [[Prototype]]: Object
    1:
      children: []
      id: 7
      name: "name2"
      [[Prototype]]: Object

The 'children' field also has 'children', 'id' and 'name' fields just like themselves. What I want is to sort both the data itself and the data in the children field in it according to their 'id' fields.

3
  • Just as a note, shorten ur sort return by writing (group1.id - group2.id), there is no need to make it an if statement Commented Dec 17, 2021 at 13:01
  • Please provide a sample array and expected output after the sort array Commented Dec 17, 2021 at 13:03
  • I provided your requests @MaximilianDolbaum Commented Dec 17, 2021 at 13:21

1 Answer 1

1

first you need to know that array sort method sorts the array in-place it means it changes the array you pass to it. so

const rawData= [...] // your raw, un-sorted data

function sortAscending(data){...} // your function that does sorting

sortAscending(rawData) // after this, your array gets sorted 'in-place'

second, if your data has children and those children have their own children and you want them all be sorted ascending you need to write some recursive algorithm. for example:

function sortAscending(data){
  data.sort((group1, group2) => group1.id - group2.id));
  for(group of data){
     if (group.children.length) sortAscending(group.children);
  }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.