-2

I've got the following array of objects:

var source =  [
  {"name": "title_1", "category": "order"},
  {"name": "title_2", "category": "purchase"},
  {"name": "title_3", "category": "order"},
  {"name": "title_4", "category": "detail"},
  {"name": "title_5", "category": "order"},
  {"name": "title_6", "category": "purchase"},
]

I need to sort this array out to get elements in order (first - orders, second - detail, third - purchase):

console.log(source.sort(function () {
   // todo: ?
}))

Expected result:

[
  {"name": "title_1", "category": "order"},
  {"name": "title_3", "category": "order"},
  {"name": "title_5", "category": "order"},
  {"name": "title_4", "category": "detail"},
  {"name": "title_2", "category": "purchase"},
  {"name": "title_6", "category": "purchase"},
]

How to write sort function to get expected result?

Erik
  • 13,045
  • 47
  • 127
  • 205

1 Answers1

4

You could create an object which holds the priority of each category, then sort it based on that object.

const source =  [
  {"name": "title_1", "category": "order"},
  {"name": "title_2", "category": "purchase"},
  {"name": "title_3", "category": "order"},
  {"name": "title_4", "category": "detail"},
  {"name": "title_5", "category": "order"},
  {"name": "title_6", "category": "purchase"},
];

const priority = {
   order: 3,
   detail: 2,
   purchase: 1,
};

const r = source.sort((a, b) => priority[b.category] - priority[a.category]);
console.log(r);
kind user
  • 34,867
  • 6
  • 60
  • 74
  • 1
    This is a duplicate question, but you did provide a pretty good alternative answer. +1 – Ibu Dec 04 '18 at 21:27