【问题标题】:jQuery .each() function - Which method is optimized? [closed]jQuery .each() 函数 - 优化了哪种方法? [关闭]
【发布时间】:2013-09-25 12:47:01
【问题描述】:

我正在使用 jQuery .each() 函数检索存在于 <a> 元素中的文本值并将其存储在一个数组中。我找到了以下两种方法,但不确定我应该更喜欢哪一种。

var textArr = [];

// Method 1
var textLinks = $("a").each(function(){
    textArr.push($.trim($(this).text()));
});


//Method 2
$("a").each(function(){
    textArr.push($.trim($(this).text()));
});

方法一和方法二的优缺点是什么?

【问题讨论】:

  • 它们是相同的,只是首先将$("a") 的结果分配给变量
  • 区别在哪里?
  • 测试一下:jsperf.com
  • $("a").each(function(k,v){ textArr[k] = $.trim($(this).text()); }); 应该快一点。你绝对应该在这里使用$.map
  • “您更喜欢哪种方法?” Stack Overflow 不是用于调查,而是用于提出具有特定答案的问题。有关详细信息,请参阅帮助。

标签: javascript jquery each


【解决方案1】:

我会使用map(),因为它就是为了这个目的(不需要临时数组)

var textLinks = $("a").map(function(){
    return $.trim($(this).text());
});

编辑:如果我正在寻找最快的解决方案,我会从放弃 jQuery 开始;)

var textLinks = (Array.prototype.slice.call(document.links)).map(function(a){ return a.textContent || a.innerText })

或者,如果您担心没有 Array.map 的浏览器,请使用普通的老式 while 循环。看起来很乱,但速度很快。

var textLinks = (function(links, out){ 
    var i = links.length, a; 
    while(a = links[--i]){ out[i] = a.textContent || a.innerText } 
    return out; 
}(document.links,[]))

Added to jsperf test

【讨论】:

  • jashwant 的上述评论似乎比您的帖子快。 jsperf
  • @Mr_Green 我使用了map,因为它清楚地表达了代码的意图——“根据这些规则对每个元素创建一个新列表”,而each 表示“做something 到列表的每个元素”。
  • +1 我从上次的方法中学到了更多关于 JS 的知识:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多