How to sort an array of objects based on the numerical value of an object property?

I have an array like this

var arr = [{ "name": "John", "age": "16" }, 
           { "name": "Charles", "age": "26" }, 
           { "name": "Charles", "age": "12" }, 
           { "name": "Charles", "age": "44" }, 
           { "name":"Charles", "age": "1" },
           { "name": "Charles", "age": "4"}]

The function i tried is

var sorted = yourArray.sort(function IHaveAName(a, b)
{ // non-anonymous as you ordered...
    return b.age < a.age ? 1 // if b should come earlier, push a to end
     : b.age > a.age ? -1 // if b should come later, push a to begin
     : 0;                   // a and b are equal
});

result obtained

[ { name: 'Charles', age: '1' },
{ name: 'Charles', age: '12' },
{ name: 'John', age: '16' },
{ name: 'Charles', age: '26' },
{ name: 'Charles', age: '4' },
{ name: 'Charles', age: '44' } ]

In that charles having age 4 should come at top.

where i am going wrong ?

Your ages are strings and are being sorted as such.

Run them through parseInt when you sort them if you want a numeric result.

var sorted = arr.sort(function IHaveAName(a, b)
{   var _a = parseInt(a.age, 10), _b = parseInt(b.age, 10);
    return _b < _a ? 1 // if b should come earlier, push a to end
     : _b > _a ? -1 // if b should come later, push a to begin
     : 0;                   // a and b are equal
});

Here's a pretty concise example!

var arr = [{x: '5'}, {x: '1'}, {x: '10'}, {x: '-1'}];
//=> [ { x: '5' },
//     { x: '1' },
//     { x: '10' },
//     { x: '-1' } ]

arr.sort(function(a,b) { return Number(a.x) - Number(b.x); });
//=> [ { x: '-1' },
//     { x: '1' },
//     { x: '5' },
//     { x: '10' } ]