5

I have an array of objects

Say,

var fruits = [
   {name:'apple', capital:'sample'},
   {name:'Tomato', capital:'sample'},
   {name:'jack fruit', capital:'sample'},
   {name:undefined, capital:'sample'},
   {name:'onion', capital:'sample'},
   {name:'Mango', capital:'sample'},
   {name:'Banana', capital:'sample'},
   {name:'brinjal', capital:'sample'}
];

I need to sort the array in ascending by name

  1. The object may contain undefined in the name
  2. The object name may be a mixture of upper case and lowercase (So it must be a case insensitive search)

If the array has undefined, then that object should be pushed to the end of the sorted list.

Expected output

var fruits = [
   {name:'apple', capital:'sample'},
   {name:'Banana', capital:'sample'},
   {name:'brinjal', capital:'sample'},
   {name:'jack fruit', capital:'sample'},
   {name:'Mango', capital:'sample'},
   {name:'onion', capital:'sample'},
   {name:'Tomato', capital:'sample'},
   {name:undefined, capital:'sample'}
];
0

1 Answer 1

8

const fruits = [
   { name: 'apple', capital: 'sample' },
   { name: 'Tomato', capital: 'sample' },
   { name: 'jack fruit', capital: 'sample' },
   { name: undefined, capital: 'sample' },
   { name: undefined, capital: 'sample' },
   { name: undefined, capital: 'sample' },
   { name: 'onion', capital: 'sample' },
   { name: 'Mango', capital: 'sample' },
   { name: 'Banana', capital: 'sample' },
   { name: 'brinjal', capital: 'sample' }
];

const res = fruits.sort(function (a, b) {
  if (a.name === undefined) return 1;
  if (b.name === undefined) return -1;
  if (a.name === b.name) return 0;
  return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1;
});

console.log(res);

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.