Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript Case Insensitive Sort objects containing undefined as value

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'}
];
like image 715
nijin Avatar asked Feb 12 '23 13:02

nijin


1 Answers

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);
like image 82
Oleksandr T. Avatar answered May 04 '23 00:05

Oleksandr T.