【问题标题】:Fastest way to filter a jQuery selection's return array过滤 jQuery 选择的返回数组的最快方法
【发布时间】:2014-05-23 12:53:17
【问题描述】:

我正在寻找一种过滤jQuery选择的返回数组的方法。

假设我有 jQuery 返回的元素数组:

window.elementSet = $("element");

现在,我想过滤这个数组,只显示具有“汽车”类的元素,无需重新设计选择器,所以

window.elementSetOfCars = $("element.car");

由于返回值是一个元素数组,我们可以只使用 .filter 或 .grep 或简单的 for / while 循环,我们使用 .hasClass() 或 attr("class" ),或者其他什么。

最快的方法是什么?

【问题讨论】:

  • 为什么不自己进行基准测试呢?使用 jsperf 进行测试 :-)
  • 谢谢,我不得不承认,我不知道这个网站 :) - 不过,我认为,其他人可能会遇到这个问题,并且在编码过程中发现答案也很有帮助。
  • 只要这种过滤只是在内存中进行,并且如果您没有数百万个元素,那么它应该无关紧要,因为速度差异可以忽略不计。
  • 并非如此,但如果许多其他功能同时运行,它确实如此 :)
  • 我同意值得在这里提出问题和答案,但我想帮助您找到自己的答案。 :-) 如果您尝试一下,请务必在此处发布您的结果。我把我的回复作为评论,因为显然这不是一个答案。

标签: javascript jquery arrays loops selector


【解决方案1】:

您可以执行以下操作:

var elementSetOf = window.elementSet.filter(function(val,i,arr){
return (val.className.indexOf('car') >= 0);
});

但是,请记住 $(selector) 的结果实际上不是一个数组,而是一个“类数组”对象,这意味着很多 Array 方法和属性都可以工作,但不是全部。 More info here

【讨论】:

  • 是的,这肯定行得通,但 Steven 询问了过滤他的数据的最快方法。所以原生 JS 会比 jQuery 的filter 更快。但是正如已经指出的那样,除了在非常特殊的情况下需要执行此操作无数次之外,无论其他功能是否同时运行,您都不会注意到差异。编辑:有人建议使用jQuery.filter,但删除了他的评论。现在没有多大意义:/
  • 没错,沃尔多。但是,window.elementSet.filter(".cars") 将是这里对开发人员最友好的解决方案,但远不是最快的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2013-01-16
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多