【问题标题】:jQuery equivalent to Prototype array.last()jQuery 等价于 Prototype array.last()
【发布时间】:2010-11-12 16:44:56
【问题描述】:

原型:

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

在 jQuery 中有什么类似的吗?

【问题讨论】:

标签: jquery arrays


【解决方案1】:

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

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

如果你愿意,你也可以把它写成一个方法(假设你的页面中没有包含原型):

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

【讨论】:

  • 因为像下面这样的东西看起来不太好: $('a').attr('href').split('#').last();
  • 我觉得不错。为什么说没有呢?对 .split() 的调用结束了链式能力,因此没有损失。
  • 这是错误的。如果数组为空,则查找array[-1]
  • @DisgruntledGoat ...这将返回undefined。这与 Prototype 的行为相同:prototypejs.org/api/array/last
  • 你没有回答他的问题。是的,原始 javascript 可能更好,但问题是 jQuery 等价物。您提出的解决方案可能会在某些 jQuery 场景中产生不希望的情况(我自己有经验)
【解决方案2】:

使用切片():

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

【讨论】:

  • 为什么不只是 .slice().pop() 复制数组并从副本中弹出一个元素?
  • @gnarf 我猜是因为使用.slice() 复制所有数组可能比使用.slice(-1) 仅复制最后一个元素更昂贵
【解决方案3】:

当处理一个 jQuery 对象时,.last() 会这样做,将匹配的元素过滤到集合中的最后一个。

当然,您可以使用 jQuery 包装一个原生数组,从而实现:

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

【讨论】:

    【解决方案4】:

    为什么不用get函数?

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

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

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

    【讨论】:

    • 鉴于提出的问题,我认为这是最相关和最优雅的答案。根据 jQuery 文档:“负索引从匹配集的末尾开始计算,因此此示例返回列表中的最后一项:”谢谢。
    • 这是错误的,.get() - Retrieve the DOM elements matched by the jQuery object.。这并不意味着在这样的数组上使用。
    • @DelightedD0D 在这种情况下,您已经回答了我回答中的“为什么不”部分。
    【解决方案5】:

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

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

    在 jQuery 中,您有 :last 选择器,但这对普通数组没有帮助。

    【讨论】:

      【解决方案6】:

      如果你在数组上使用原型:

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

      使用 forloops 可以做到这一点。

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

      【讨论】:

      • 你应该使用 hasOwnProperty 来避免这种情况。
      【解决方案7】:

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

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

      对我来说很好。

      【讨论】:

      • 反转数组只是为了得到最后一个值是不必要的昂贵。此外,原始数组也会被修改。
      • 方法仍然返回最后一个元素。所以我看不出反对票的理由。在这里 +1。
      • 男孩,您的处理器需要更多工作才能获得相同的结果。这是一种没有收益的资源浪费。你看不出来吗? “只为我工作”是一个荒谬的口头禅。
      【解决方案8】:

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

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

      【讨论】:

        【解决方案9】:

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

        【讨论】:

        • 很多人谈论这种方式或那种方式的性能更高,有人发布了一个展示性能的链接,但没有点赞。当然,这可能是因为他倒读了图表。我已经更正并扩展了他的 cmets。
        • @MichaelBlackburn 嘿!我在审核队列中发现了您的编辑,并认为我应该解释为什么它被拒绝,尽管它更准确。简单地说:edits shouldn't change the content of a post, even to fix factual errors——相反,最好对这些答案投反对票并留下评论解释原因。当然,您是绝对正确的,所以也许您可以使用 accurate 性能信息添加您自己的答案?我会赞成! :)
        【解决方案10】:

        网址:www.mydomain.com/user1/1234

        $.params = window.location.href.split("/"); $.params[$.params.length-1];

        您可以根据查询字符串分隔符进行拆分

        【讨论】:

          【解决方案11】:

          你可以使用这个Arr.slice(-1)[0]

          Arr=[1,2,3,4,5,6,7]

          让我们明白这一点。 -1 表示您正在查找 Array 的最后一个索引。 因此,当您使用 Arr.slice(-1)[0] 时,您将得到结果:7

          【讨论】:

            【解决方案12】:

            SugarJS

            它不是 jQuery,而是另一个你可能会发现除了 jQuery 之外有用的库:试试SugarJS

            Sugar 是一个 Javascript 库,它使用有用的方法扩展原生对象。它旨在直观、不显眼,让您用更少的代码做更多的事情。

            使用 SugarJS,您可以:

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

            这意味着,您的示例确实可以开箱即用:

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

            更多信息

            【讨论】:

              【解决方案13】:

              我用这个:

              array.reverse()[0]

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

              如果您当然不关心数组是否被反转,您可以使用此代码,因为它会一直如此。

              【讨论】:

              • 反转数组,取反转版本的第一个,所以原来的最后一个
              • 这是 O(n),因为它会反转整个数组,即使您只需要最后一个条目。 Salty 的答案是 O(1),随着数组变长,它的速度会更快。
              猜你喜欢
              • 2010-10-03
              • 2013-01-05
              • 1970-01-01
              • 2011-06-06
              • 2014-01-04
              • 2011-08-28
              • 1970-01-01
              • 1970-01-01
              • 2011-04-28
              相关资源
              最近更新 更多