jQuery相当于Prototype array.last()


69

原型:

var array = [1,2,3,4];
var lastEl = array.last();

有什么与此类似的jQuery?

Answers:


144

为什么不只使用简单的javascript?

var array=[1,2,3,4];
var lastEl = array[array.length-1];

如果愿意,您也可以将其编写为方法(假设页面上未包含原型):

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

1
因为类似下面的内容看起来不太好:$('a')。attr('href')。split('#')。last(); <-当然,last()不是这里的jquery函数...只是为了举例

7
在我看来很好。你为什么不说呢?对.split()的调用结束了可链接性,因此不会造成任何损失。
肯·布朗宁

13
错了 如果数组为空,则表示您正在查找array[-1]
DisgruntledGoat

7
@DisgruntledGoat ...将会返回undefined。这与Prototype的行为相同:prototypejs.org/api/array/last
Jo Liss

4
你没有回答他的问题。是的,原始javascript可能更好,但问题是jQuery等效。您提出的解决方案可能会在某些jQuery场景中(在我自己有经验的情况下)产生不希望的情况
Sandwich,2013年

82

与slice():

var a = [1,2,3,4];
var lastEl = a.slice(-1)[0]; // 4
// a is still [1,2,3,4]

与pop();

var a = [1,2,3,4];
var lastEl = a.pop(); // 4
// a is now [1,2,3]

有关更多信息,请参见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array


11
为什么不只是.slice().pop()复制数组并从副本中弹出一个元素呢?
gnarf

1
@gnarf我猜是因为复制所有数组.slice()可能比仅复制最后一个元素更昂贵.slice(-1)
Oriol 2013年

22

在处理jQuery对象时,.last()将仅执行此操作,将匹配的元素仅过滤到集合中的最后一个元素。

当然,您可以使用jQuery包装本机数组,从而实现以下目的:

var a = [1,2,3,4];
var lastEl = $(a).last()[0];

12

为什么不使用get函数?

var a = [1,2,3,4];
var last = $(a).get(-1);

http://api.jquery.com/get/更多信息

编辑: 正如DelightedD0D指出的那样,这不是根据jQuery文档使用的正确函数,但它仍然提供正确的结果。我建议使用Salty的答案来保持您的代码正确。


1
鉴于提出的问题,我认为这是最相关,最优雅的答案。根据jQuery文档:“从匹配集的末尾开始计算负索引,因此此示例返回列表中的最后一项:”谢谢。
Pavel Lechev 2015年

1
这是错误的.get() - Retrieve the DOM elements matched by the jQuery object.。不能在这样的数组上使用它。
韦斯利·史密斯

1
@ DelightedD0D在这种情况下,您已经回答了我的回答的“为什么不这样做”部分。
Muhan Alim

2

对于数组,您可以使用以下命令简单地检索最后一个元素的位置array.length - 1

var a = [1,2,3,4];

var lastEl = a[a.length-1]; // 4

在jQuery中,您具有:last选择器,但这对纯数组无济于事。


2

如果您在数组上使用原型,例如:

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

使用forloops可以做到这一点。

var a = [0,1,2];
out --> 0
out --> 1
out --> 2
out --> last

您应该使用hasOwnProperty来避免这种情况。
bersam 2014年

2

我知道答案已经给出,但是我想我已经找到了另一种解决方案。您可以采用数组,将其反转并输出第一个数组项,如下所示:

var a = [1,2,3,4];
var lastItem = a.reverse()[0];

对我来说很好。


1
仅反转数组以获取最后一个值就不必要了。同样,原始数组也会被修改。
SergiRamón2012年

方法仍然返回最后一个元素。因此,我看不出反对的理由。+1。
波卡

2
男孩,您的处理器需要更多的工作才能达到相同的结果。这是浪费资源而没有收益。你看不出来吗 “为我而工作”是一个荒谬的口头禅。
miguelsan

1

根据jsPerf:最后一项方法,性能最高的方法是array[array.length-1]。该图显示的是每秒的操作数,而不是每个操作的时间。

对于开发人员来说,通常认为单个操作的性能很重要(但这是错误的)。它不是。仅当您执行相同操作的很多时,性能才重要。在这种情况下,使用静态值(length)访问特定索引(length-1)最快,而且距离还很近。


0

查看这些测试用例http://jsperf.com/last-item-method 最有效的方法是通过.pop方法(在V8中),但是会丢失数组的最后一个元素


1
很多人都在谈论这种方式或表现得更好,有人发布了一个链接来展示性能,而没有投票。当然那可能是因为他向后读了图表。我已更正并扩展了他的评论。
迈克尔·布莱克本

1
@MichaelBlackburn嘿!我在审核队列中发现了您的编辑,并认为我应该解释为什么它被拒绝了,尽管更加准确。简而言之:编辑不应该更改帖子的内容,甚至不能修正事实错误,相反,最好是拒绝此类回答并留下解释原因的评论。您当然是完全正确的,所以也许您可以添加自己的答案以及准确的性能信息?我会投票!:)
乔丹·格雷

0

糖糖

它不是jQuery,而是除了jQuery之外您可能还会发现的另一个库:尝试SugarJS

Sugar是一个Javascript库,可通过有用的方法扩展本机对象。它旨在直观,不引人注目,并让您用更少的代码做更多的事情。

使用SugarJS,您可以执行以下操作:

[1,2,3,4].last()    //  => 4

这意味着您的示例确实可以立即使用:

var array = [1,2,3,4];
var lastEl = array.last();    //  => 4

更多信息



0

我用这个:

array.reverse()[0]

使用reverse()反转数组,然后使用[0]选择反转版本的第一项,即原始数组的最后一项。

如果您不在乎该数组是否会反向,则可以使用此代码,因为它会保持不变。


反转数组并选择反转版本的第一个,因此选择原始版本的最后一个
SevenJay

这是O(n),因为它将反转整个数组,即使您只需要最后一个条目也是如此。Salty的答案是O(1),随着数组变长,它会更快。
pixatlazaki
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.