为什么JavaScript没有最后一种方法?

时间:2010-07-13 07:35:47

标签: javascript

JavaScript Array类没有提供检索数组最后一个元素的最后一个方法,这有点奇怪。我知道解决方案很简单(Ar [Ar.length-1]),但是,这种情况经常被使用。

为什么没有合并呢?

10 个答案:

答案 0 :(得分:263)

您可以这样做:

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

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

可以添加到语言的辅助方法的数量是无限的。我想他们只是没有考虑添加这个。

答案 1 :(得分:82)

自己定义一个很容易。这就是JavaScript的强大功能。

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

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

但是,这可能会导致第三方代码出现问题,这些代码(错误地)使用for..in循环来迭代数组。

但是,如果您不受browser support问题的约束,那么使用新的ES5语法define properties可以解决该问题,方法是使该函数不可枚举,如下所示:

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

答案 2 :(得分:38)

因为Javascript变化非常慢。那是因为人们慢慢升级浏览器。

许多Javascript库实现了自己的last()函数。使用一个!

答案 3 :(得分:26)

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

icon cat喜欢爆米花

答案 4 :(得分:13)

另一种选择,特别是如果你已经在使用UnderscoreJS,那就是:

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

答案 5 :(得分:5)

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

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

答案 6 :(得分:4)

来到这里寻找这个问题的答案。切片答案可能是最好的,但我继续创建了一个“最后”功能,只是为了练习扩展原型,所以我想我会继续分享它。它有一些额外的好处,让你可以选择向后计数数组,然后拉出第二个到最后一个或第三个到最后一个项目。如果你没有指定一个计数,它只是默认为1并拉出最后一项。

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

答案 7 :(得分:3)

这是切割最后元素的另一种更简单的方法

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

lastObj现在是["barfoo"]

Python以同样的方式做到这一点,当我尝试使用JS时,它就完成了。我猜测脚本语言中的字符串操作的工作方式是一样的。

同样,如果你想要数组中的最后两个对象,

var lastTwoObj = tags.slice(-2)

会给你["foobar", "barfoo"]等等。

答案 8 :(得分:2)

pop()方法会弹出最后一个值。但问题是你将丢失数组中的最后一个值

答案 9 :(得分:-1)

是的,还是只是:

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

如果您想要值,而不是新列表。