I have an array of object with string and numeric values. Need a natural sort to work on combined values. Example:
input array:
[
{
key1: '156557_08_315F036D',
key2: 30,
key3: 's' },
{
key1: '156557_08_315F036D',
key2: 10,
key3: 'm' },
{
key1: '156557_08_315F036D',
key2: 10,
key3: 's' },
{
key1: '156557_08_315F036D',
key2: 15,
key3: 's' },
{
key1: '156557_08_315F036D',
key2: 20,
key3: 's' }
]
This should be sorted in the ascending order of key3+key1+key2 format, where only key2 is numeric and wants to be sorted naturally..not as string.
Output would be:
[
{
key1: '156557_08_315F036D',
key2: 10,
key3: 'm' },
{
key1: '156557_08_315F036D',
key2: 10,
key3: 's' },
{
key1: '156557_08_315F036D',
key2: 15,
key3: 's' },
{
key1: '156557_08_315F036D',
key2: 20,
key3: 's' },
{
key1: '156557_08_315F036D',
key2: 30,
key3: 's' }
]
arr.sort(function (a, b) {
return (
a.key3 + a.key1 + parseInt(a.key2) >
b.key3 + b.key1 + parseInt(b.key2) ?
1 :
((b.key3 + b.key1 + parseInt(b.key2) >
a.key3 + a.key1 + parseInt(a.key2)) ?
-1 : 0));
});
Tried toString of key2, but did string sort.