Finwood
Finwood

Reputation: 3981

Get last element of a JSON object in JavaScript

I got a json object in JavaScript like:

var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};

without knowing the name of the last key. (The keys are in ascending order)

How can I read the value (and key) of the last element?

Upvotes: 15

Views: 46634

Answers (7)

Lewis Munene
Lewis Munene

Reputation: 1

getJsonLastElement(json) 
{
    let len = json.length
    return json[len - 1]
}

Upvotes: 0

Keval Bhogayata
Keval Bhogayata

Reputation: 6656

let obj = <your_object>

let last_key = Object.keys(obj)[Object.keys(obj).length - 1]
let last_value = <your_object>.last_key

OR

let last_value =  Object.values(obj)[Object.values(obj).length - 1]

Upvotes: 0

Zirak
Zirak

Reputation: 39808

var highest = json[ Object.keys(json).sort().pop() ];

Object.keys (ES5, shimmable) returns an array of the object's keys. We then sort them and grab the last one.

You can't ensure order in a for..in loop, so we can't completely rely on that. But as you said the keys are in ascending order, we can simply sort them.

Upvotes: 26

Danilo Valente
Danilo Valente

Reputation: 11342

Try this:

var lastKey;
var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};
for(var key in json){
    if(json.hasOwnProperty(key)){
        lastKey = key;
    }
}
alert(lastKey + ': ' + json[lastKey]);

Upvotes: 4

Nick Bray
Nick Bray

Reputation: 1963

ECMCA script specifications (javascript specifications) do not require browsers to maintain order of the properties of an object.

Related to for-in this is what ECMCA 5 specs say:

"The mechanics and order of enumerating the properties (step 6.a in the first algorithm, step 7.a in the second) is not specified."

Related to the Object.keys method:

"If an implementation defines a specific order of enumeration for the for-in statement, that same enumeration order must be used in step 5 of this algorithm."

It does not make sense to say get the last defined property. You can sort the properties based on the name and get the last one, but if what you want is order then keep an array.

Upvotes: 1

Roonaan
Roonaan

Reputation: 1066

Object keys are typically unordered, but looking at the keyset you are using, I made the assumption that you are looking for the highest date in the json keys:

var json = {"20121207":"13", "20121211":"9", "20121213":"7", "20121219":"4"};

function getMaxFromKeys(json) {
    var m;
    for (var i in json) {
        if (json.hasOwnProperty(i)) {
           m = (typeof m == 'undefined' || i > m) ? i : m;
        }
    }
    return m;
}

var latestDate = getMaxFromKeys(json);

Upvotes: 1

Alex Wayne
Alex Wayne

Reputation: 187024

If you don't need to support old JS engines:

var lastKey = Object.keys(json).sort().reverse()[0];
var lastValue = json[lastKey];

Don't assume the keys are in order. Get the keys, and then sort them, and then grab that largest value after the sort.

Upvotes: 2

Related Questions