8

I have a list of array items like this:

const items = [
  { a: 1 },
  { b: 2 },
  { c: 3 },
]

How can I return / log the last element: { c: 3 }

Here's what I've tried so far:

let newarray = items.map((item) => {
    console.log(item);
})

console.log(newarray);
2

7 Answers 7

32

Update 2021+

You can use the Array.at() method, which was moved to Stage 4 in Aug, 2021.

['a','b','c'].at(-1) // 'c'

This is often referred to as relative indexing which...

takes an integer value and returns the item at that index, allowing for positive and negative integers. Negative integers count back from the last item in the array.

Further Reading

Sign up to request clarification or add additional context in comments.

2 Comments

Good answer. But misleading in terms, that it states that Array.at() is part of a living ECMAScript 2021 standard - whereas as of writing this comment (04.02.22) it's still a Stage 4 proposal. tc39.es/proposal-relative-indexing-method/…
Thanks @avalanche1 - updated the answer to clarify. Seems like stage 4 is a finished proposal and will be released whenever the next version of ECMAScript ships.
10

just log the length minus 1, nothing to do with es6:

console.log(items[items.length - 1])

Comments

3

If your list has 3 items, the length is 3 but the last item index is 2, since arrays start at 0, so simply do this:

console.log(items[items.length - 1]);

Doc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

Comments

2

I want to let you try something different:

console.log(items.slice(-1));

2 Comments

items.slice(-1)[0]
In case the previous comment isn't clear, slice() returns an array. items.slice(-1) returns an array containing the last element of items. items.slice(-1)[0] is the element itself, i.e. the last item in items.
2

It's not required to use ES6 to perform the operation you're asking about. You could use either of the following:

/**
 * The last value in the array, `3`, is at the '2' index in the array.
 * To retrieve this value, get the length of the array, '3', and 
 * subtract 1. 
 */
const items = [1, 2, 3];
const lastItemInArray = items[items.length - 1] // => 3

or:

/**
 * Make a copy of the array by calling `slice` (to ensure we don't mutate
 * the original array) and call `pop` on the new array to return the last  
 * value from the new array.
 */
const items = [1, 2, 3];
const lastItemInArray = items.slice().pop(); // => 3

However, if you are dead set on using ES6 to retrieve this value we can leverage the spread operator (which is an ES6 feature) to retrieve the value:

/**
 * Create new array with all values in `items` array. Call `pop` on this 
 * new array to return the last value from the new array.
 *
 * NOTE: if you're using ES6 it might be a good idea to run the code
 * through Babel or some other JavaScript transpiler if you need to
 * support older browsers (IE does not support the spread operator).
 */
const items = [1, 2, 3];
const lastItemInArray = [...items].pop(); // => 3

Comments

2

Update - October 2021 (Chrome 97+)

Proposal for Array.prototype.findLast and Array.prototype.findLastIndex is now on Stage 3!

You can use it like this:

const items = [
  { a: 1 },
  { b: 2 },
  { c: 3 },
];

const last_element = items.findLast((item) => true);
console.log(last_element);

4 Comments

This looks promising. But still doesn't support by Firefox. Do you have an idea how to mimic this with the existing ES6+ syntax? (With conditions like item.is_active == 'yes')
Hi. Just can just do this items.findLast((item) => item.is_active === 'yes');
Yeah, I figured that. But the problem is, this isn't supported by Firefox and the method itself is relatively new so a bit older browsers won't support it. Seeking for something that would work on Firefox and legacy browsers. ES6+ is just fine.
This worked, const activeKeys = items.map(item => item.is_active); const lastActiveIndex = activeKeys.lastIndexOf('yes')
1

try this

console.log(items[items.length - 1]);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.