Reputation: 556
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
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'}
];
Upvotes: 5
Views: 2210
Reputation: 77482
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);
Upvotes: 8