JavaScript Array类没有提供检索数组最后一个元素的最后一个方法,这有点奇怪。我知道解决方案很简单(Ar [Ar.length-1]),但是,这种情况经常被使用。
为什么没有合并呢?
答案 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]
如果您想要值,而不是新列表。