jQuery相当于Prototype收集和映射函数?

时间:2011-04-27 19:30:16

标签: javascript jquery arrays prototypejs

jQuery是否提供了等效的迭代器函数来在Prototype中“收集”和“映射”?这些函数返回将迭代器应用于每个元素的结果:http://www.prototypejs.org/api/enumerable/collect

谢谢!

2 个答案:

答案 0 :(得分:5)

有一个“map()”但没有“reduce()”或“collect()”。在jQuery核心代码本身没有明显好处的情况下,jQuery人员有很强的抗拒添加“reduce()”的历史。

您可以从Functional.js库中选择和扩展这些函数的简单实现。

另外,请注意,jQuery“map”工具有一些有问题的功能,有时候很方便,但其他人却很痛苦。具体来说,传入“map()”的回调函数会返回结果数组的值,如您所料。但是有两种特殊情况:

  1. 如果函数返回nullundefined,那么 nothing 将被添加到结果数组中;换句话说,它被解释为跳过该元素的请求。这使得很难有一个带有显式null条目的结果数组。
  2. 如果函数返回一个数组,则将数组插入到生成的数组中。换句话说,如果函数返回一个包含10个项的数组,那么结果数组(即最终从调用“map()”返回的数组)将被10个新元素增加,而不是一个元素,其值为10件事的数组。
  3. 这两种款待有时都很方便,但是花了半天时间才发现第二种(是的,记录在案)我有一些痛苦的回忆: - )

答案 1 :(得分:2)

jQuery等效项是.map()see docs

因此,如果在原型中你有:

['Hitch', "Hiker's", 'Guide', 'To', 'The', 'Galaxy'].collect(function(s) {
  return s.charAt(0).toUpperCase();
}).join(''); // -> 'HHGTTG'

只需将collect替换为map(或者如果已使用map,则无需更改任何内容!):

['Hitch', "Hiker's", 'Guide', 'To', 'The', 'Galaxy'].map(function(s) {
  return s.charAt(0).toUpperCase();
}).join(''); // -> 'HHGTTG'