使用$(array).each迭代数组

时间:2015-01-05 16:50:24

标签: jquery arrays

我最近遇到了一个我以前没见过的jQuery构造。这是一个简化版本:

$([ '1', '2', '3' ]).each( function( index, value ) {
  console.log( "index", index, "value", value );
});

迭代数组[ '1', '2', '3' ]的所有元素。问题是,我常常看到$(...)与CSS选择器一起使用,但我还没有看到它在新声明的数组中使用,就像在这里所做的那样。但它似乎可行(使用Firefox 34和Chromium 39进行测试)。

Q1:我是否理解这相当于

var a = [ '1', '2', '3' ];
for ( var i = 0, value; value = a[i]; i++ ) {
  console.log( "index", i, "value", value );
}

如果没有,有什么区别? (除了这声明变量aivalue)之外。

Q2:就jQuery中的数组进行迭代而言,我更习惯$.each(不要与上面使用的$(selector).each混淆)。以上是否等同于

$.each( [ '1', '2', '3' ], function( index, value ){
  console.log( "index", index, "value", value );
});

如果是,为什么jQuery中有两个非常相似的结构?在两者之间,迭代数组的首选方法是什么,或者这仅仅是个人风格的问题?

2 个答案:

答案 0 :(得分:4)

Q1。是的。

Q2。 jQuery接受数组(和类似数组的对象)并将它们转换为jQuery对象。

您可以在浏览器控制台上轻松查看:

console.dir($([ '1', '2', '3' ]))
> VM199:2 e.fn.e.init[3]

这是一个调用返回的jQuery对象。它们可以使用.each()进行迭代。这个工具旨在让你这样做(人为的例子):

$(document.getElementsByTagName("A")).each(func);

使用简单的字符串数组这样做可能会继续有效,但我仍然认为这是对API的误用,并建议采用正确的方法:

$.each(['1', '2', '3' ], func);

答案 1 :(得分:3)

Q1 :正如其他人所说,是的。

Q2 :首先说不是因为你可以

您可以使用$([ '1', '2', '3' ]).each()这是正确的,但它效果不佳。

两者都不一样(尽管它们相似)。如jQuery doc中所述:

  

$.each()函数与$(selector).each()不同,$.each()用于独占于jQuery对象进行迭代。 $([ '1', '2', '3' ]).each()函数可用于迭代任何集合,无论它是对象还是数组。

这意味着如果使用each,则创建一个不需要的jQuery对象。它更快,性能更明智,jQuery对象的属性.each()然后调用传递数组的函数,而不是调用创建数组的jQuery对象的函数,然后访问其原型{{1}}。 / p>