-2
var array = [{value:"13",type:"Fruit"},{value:"61",type:"Animal"},
             {value:"19",type:"Fruit"},{value:"71",type:"Animal"},
             {value:"12",type:"Fruit"},{value:"15",type:"Fruit"}, 
             {value:"11",type:"Plant"},{value:"10",type:"Fruit"}, 
             {value:"16",type:"Plant"}] 

What is the best/optimized way to sort this array such that I get all elements of type Fruit first and then the elements of type Animal (by picking elements from end of array).

expectedOutput = [{value:"10",type:"Fruit"}, 
             {value:"15",type:"Fruit"},{value:"12",type:"Fruits"},
             {value:"19",type:"Fruit"},{value:"13",type:"Fruit"},
             {value:"71",type:"Animal"},{value:"61",type:"Animal"}, 
             {value:"16",type:"Plant"},{value:"11",type:"Plant"}]

Note:- I don't need to sort it Alphabetically. It must be sort depending upon the specific type.

0

1 Answer 1

1

You can store the order of the type properties in an array, then subtract the index of the type property when sorting to determine precedence:

const order = ["Fruits", "Animal"]

var array = [{value:"13",type:"Fruit"},{value:"61",type:"Animal"},
             {value:"19",type:"Fruit"},{value:"71",type:"Animal"},
             {value:"12",type:"Fruit"},{value:"15",type:"Fruit"}] 

const sorted = array.sort((a,b) => order.indexOf(a.type) - order.indexOf(b.type))

console.log(sorted)

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.