jQuery是否提供了等效的迭代器函数来在Prototype中“收集”和“映射”?这些函数返回将迭代器应用于每个元素的结果:http://www.prototypejs.org/api/enumerable/collect
谢谢!
答案 0 :(得分:5)
有一个“map()”但没有“reduce()”或“collect()”。在jQuery核心代码本身没有明显好处的情况下,jQuery人员有很强的抗拒添加“reduce()”的历史。
您可以从Functional.js库中选择和扩展这些函数的简单实现。
另外,请注意,jQuery“map”工具有一些有问题的功能,有时候很方便,但其他人却很痛苦。具体来说,传入“map()”的回调函数会返回结果数组的值,如您所料。但是有两种特殊情况:
null
或undefined
,那么 nothing 将被添加到结果数组中;换句话说,它被解释为跳过该元素的请求。这使得很难有一个带有显式null
条目的结果数组。这两种款待有时都很方便,但是花了半天时间才发现第二种(是的,记录在案)我有一些痛苦的回忆: - )
答案 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'