Why doesn't JavaScript have a last method?

Javascript

Javascript Problem Overview


Its kinda weird that the JavaScript Array class does not offer a last method to retrieve the last element of an array. I know the solution is simple (Ar[Ar.length-1] ), but, still, this is too frequently used.

Any serious reasons why this is not incorporated yet?

Javascript Solutions


Solution 1 - Javascript

You can do something like this:

[10, 20, 30, 40].slice(-1)[0]

console.log([10, 20, 30, 40].slice(-1)[0])

The amount of helper methods that can be added to a language is infinite. I suppose they just haven't considered adding this one.

Solution 2 - Javascript

It's easy to define one yourself. That's the power of JavaScript.

if(!Array.prototype.last) {
    Array.prototype.last = function() {
        return this[this.length - 1];
    }
}

var arr = [1, 2, 5];
arr.last(); // 5

However, this may cause problems with 3rd-party code which (incorrectly) uses for..in loops to iterate over arrays.

However, if you are not bound with browser support problems, then using the new ES5 syntax to define properties can solve that issue, by making the function non-enumerable, like so:

Object.defineProperty(Array.prototype, 'last', {
    enumerable: false,
    configurable: true,
    get: function() {
        return this[this.length - 1];
    },
    set: undefined
});

var arr = [1, 2, 5];
arr.last; // 5

Solution 3 - Javascript

Because Javascript changes very slowly. And that's because people upgrade browsers slowly.

Many Javascript libraries implement their own last() function. Use one!

Solution 4 - Javascript

i = [].concat(loves).pop(); //corn

icon cat loves popcorn

Solution 5 - Javascript

Another option, especially if you're already using UnderscoreJS, would be:

_.last([1, 2, 3, 4]); // Will return 4

Solution 6 - Javascript

Array.prototype.last = Array.prototype.last || function() {
    var l = this.length;
    return this[l-1];
}

x = [1,2];
alert( x.last() )

Solution 7 - Javascript

Came here looking for an answer to this question myself. The slice answer is probably best, but I went ahead and created a "last" function just to practice extending prototypes, so I thought I would go ahead and share it. It has the added benefit over some other ones of letting you optionally count backwards through the array, and pull out, say, the second to last or third to last item. If you don't specify a count it just defaults to 1 and pulls out the last item.

Array.prototype.last = Array.prototype.last || function(count) {
    count = count || 1;
    var length = this.length;
    if (count <= length) {
        return this[length - count];
    } else {
        return null;
    }
};

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.last(); // returns 9
arr.last(4); // returns 6
arr.last(9); // returns 1
arr.last(10); // returns null

Solution 8 - Javascript

Here is another simpler way to slice last elements

 var tags = [1, 2, 3, "foo", "bar", "foobar", "barfoo"];
 var lastObj = tags.slice(-1);

lastObj is now ["barfoo"].

Python does this the same way and when I tried using JS it worked out. I am guessing string manipulation in scripting languages work the same way.

Similarly, if you want the last two objects in a array,

var lastTwoObj = tags.slice(-2)

will give you ["foobar", "barfoo"] and so on.

Solution 9 - Javascript

pop() method will pop the last value out. But the problem is that you will lose the last value in the array

Solution 10 - Javascript

Yeah, or just:

var arr = [1, 2, 5];
arr.reverse()[0]

if you want the value, and not a new list.

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
QuestionNikhil GargView Question on Stackoverflow
Solution 1 - JavascriptÁlvaro GonzálezView Answer on Stackoverflow
Solution 2 - JavascriptAnuragView Answer on Stackoverflow
Solution 3 - JavascriptKenan BanksView Answer on Stackoverflow
Solution 4 - JavascriptSilviu-MarianView Answer on Stackoverflow
Solution 5 - JavascriptPablo DiazView Answer on Stackoverflow
Solution 6 - Javascriptmeder omuralievView Answer on Stackoverflow
Solution 7 - JavascriptDanielView Answer on Stackoverflow
Solution 8 - JavascriptPrashantView Answer on Stackoverflow
Solution 9 - JavascriptPrashanth ShyamprasadView Answer on Stackoverflow
Solution 10 - JavascriptTDahlView Answer on Stackoverflow