getting the last item in a javascript object

JavascriptObject

Javascript Problem Overview


If I have an object like:

{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }

If I don't know in advance that the list goes up to 'c', other than looping through the object, is there a way to get the last item in the object (e.g. 'carrot')?

Javascript Solutions


Solution 1 - Javascript

Yes, there is a way using Object.keys(obj). It is explained in this page:

var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]

If you want to get the value of the last object, you could do this:

fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"

Solution 2 - Javascript

No. Order is not guaranteed in JSON and most other key-value data structures, so therefore the last item could sometimes be carrot and at other times be banana and so on. If you need to rely on ordering, your best bet is to go with arrays. The power of key-value data structures lies in accessing values by their keys, not in being able to get the nth item of the object.

Solution 3 - Javascript

last = Object.keys(obj)[Object.keys(obj).length-1];

where obj is your object

Solution 4 - Javascript

The other answers overcomplicate it for me.

let animals = {
  a: 'dog',
  b: 'cat',
  c: 'bird'
}

let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]

Solution 5 - Javascript

var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";

source:http://javascriptweblog.wordpress.com

Solution 6 - Javascript

Solution using the destructuring assignment syntax of ES6:

var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"

Solution 7 - Javascript

You can try this. This will store last item. Here need to convert obj into array. Then use array pop() function that will return last item from converted array.

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);

Solution 8 - Javascript

Use an array, not an object literal, if order matters.

const list = ['apple', 'banana', 'carrot'];

Or something like

const dict = {
 'a' : ['apple', 'awesome'],
 'b' : ['best friend']
};

Or even..

const dict = [{letter:'a', list:['apple', 'awesome']},
              {letter:'b', list:['best friend']}];

The keys for dict are not guaranteed at all to be in order.

Solution 9 - Javascript

As for the ordering of object properties in Javascript, I will just link to this answer:

https://stackoverflow.com/questions/280713/elements-order-for-in-loop-in-javascript/280861#280861

Specifically:

> All modern implementations of > ECMAScript iterate through object > properties in the order in which they > were defined

So every other answer here is correct, there is no official guaranteed order to object properties. However in practice there is (barring any bugs which naturally can screw up even set-in-stone officially specified behavior).

Furthermore, the de-facto enumeration order of object properties is likely to be codified in future EMCAScript specs.

Still, at this time I would not write code around this, mostly because there are no built-in tools to help deal with object property order. You could write your own, but in the end you'd always be looping over each property in an object to determine its position.

As such the answer to your question is No, there is no way besides looping through an object.

Solution 10 - Javascript

JSArray = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };  
document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c'   
document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot'

Solution 11 - Javascript

You could also use the Object.values() method:

Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"

Edit

To improve performance, you could create a variable:

const fruitValues = Object.values(fruitObject);

To give you:

fruitValues[fruitValues.length - 1];

Solution 12 - Javascript

const fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
const lastValue = Object.values(fruitObject).slice(-1)[0];

It seems to be a short way.

https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/values https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

Solution 13 - Javascript

[Map object in JavaScript][1] [1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map . This is already about 3 years old now. This map data structure retains the order in which items are inserted. With this retrieving last item will actually result in latest item inserted in the Map

Solution 14 - Javascript

Let obj be your object. Exec:

(_ => _[Object.keys(_).pop()])( obj )

Solution 15 - Javascript

if you mean get the last key alphabetically, you can (garanteed) :

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var keys = Object.keys(obj);
keys.sort();
var lastkey = keys.pop() // c
var lastvalue = obj[lastkey] // 'carrot'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsprugmanView Question on Stackoverflow
Solution 1 - JavascriptKristina StefanovaView Answer on Stackoverflow
Solution 2 - JavascriptAlexView Answer on Stackoverflow
Solution 3 - Javascriptuser3282891View Answer on Stackoverflow
Solution 4 - JavascriptsomebodysomewhereView Answer on Stackoverflow
Solution 5 - JavascriptGeorgeView Answer on Stackoverflow
Solution 6 - JavascriptollazarevView Answer on Stackoverflow
Solution 7 - JavascriptShapon PalView Answer on Stackoverflow
Solution 8 - Javascriptmeder omuralievView Answer on Stackoverflow
Solution 9 - JavascriptMooGooView Answer on Stackoverflow
Solution 10 - JavascriptReha OzencView Answer on Stackoverflow
Solution 11 - JavascriptAshNaz87View Answer on Stackoverflow
Solution 12 - JavascriptgrehhView Answer on Stackoverflow
Solution 13 - JavascriptvatsaView Answer on Stackoverflow
Solution 14 - JavascriptdiogoView Answer on Stackoverflow
Solution 15 - JavascriptRaphael PICCOLOView Answer on Stackoverflow