Sort by index an array

21,747

Solution 1

Sort the list first, by a custom sort function which will compare the indices, and then map.

    var exemples =  [
            {
                'name'     : 'd',
                'index'    : 3
            },
            {
                'name'     : 'c',
                'index'     : 2
            },
            {
                'name'     : 'a',
                'index'    : 0
            },
            {
                'name'     : 'b',
                'index'    : 1
            }
        ];

      const list = exemples.sort((a,b) => a.index - b.index).map((exemple, index, array) => exemple.name)

      console.log(list)

Solution 2

You don't need to sort and filter. Use Array#reduce. In just one iteration you can get the sorted elements. This is more efficient than first sorting and then filtering. This would give you O(n) solution. See below as an example.

var exemples = [{
    'name': 'd',
    'index': 3
  },
  {
    'name': 'c',
    'index': 2
  },
  {
    'name': 'a',
    'index': 0
  },
  {
    'name': 'b',
    'index': 1
  }
];

var ans = exemples.reduce(function (r,v) {
  r[v.index] = v.name;
  return r;
}, []);

console.log(ans);

Solution 3

You can sort the array before you map it. Here is an example:

var exemples =  [{'name'     : 'd','index'    : 3},{'name'     : 'c','index'     : 2},{'name'     : 'a','index'    : 0},{'name'     : 'b','index'    : 1}];

const list = exemples.sort((v1, v2) => v1.index - v2.index).map((v) => v.name);
console.log(list)

Share:
21,747
Pierre Trzaska
Author by

Pierre Trzaska

Starting from the bottom

Updated on July 05, 2022

Comments

  • Pierre Trzaska
    Pierre Trzaska almost 2 years

    Look at the code below:

        var exemples =  [
                {
                    'name'     : 'd',
                    'index'    : 3
                },
                {
                    'name'     : 'c',
                    'index'     : 2
                },
                {
                    'name'     : 'a',
                    'index'    : 0
                },
                {
                    'name'     : 'b',
                    'index'    : 1
                }
            ];
    
          const list = exemples.map((exemple, index, array) => exemple.name)
    
          console.log(list)

    it gives me that array:

    ["d", "c", "a", "b"]
    

    I would like to respect the index and get a result like that:

    ["a", "b", "c", "d"]
    

    Sounds like a basic question but I need your help. Thanks.