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

jQuery equivalent to Prototype collect and map functions?

本文关键字:映射函数 Prototype jQuery 相当于      更新时间:2023-09-26

jQuery是否提供了一个等效的迭代器函数来"收集"answers"映射"Prototype?以下函数返回对每个元素应用迭代器的结果:http://www.prototypejs.org/api/enumerable/collect

谢谢!

有"map()"但没有"reduce()"或"collect()"。jQuery开发人员有一段抵制添加"reduce()"的历史,因为对jQuery核心代码本身没有明显的好处。

你可以从function .js库中获取和扩展函数的简单实现。

另外,需要注意的是,jQuery"map"功能有一些有问题的特性,这些特性有时很方便,但在其他时候却很麻烦。具体来说,传递给"map()"的回调函数返回结果数组的值,正如您所期望的那样。但是有两种特殊情况:

  1. 如果函数返回nullundefined,则不添加到结果数组;换句话说,它被解释为跳过该元素的请求。这使得很难有一个显式null条目的结果数组。
  2. 如果函数返回一个数组,那么该数组将被插入到结果数组中。换句话说,如果函数返回一个包含10个元素的数组,那么结果数组(即调用"map()"最终返回的数组)将增加10个新元素,而不是增加一个值为包含10个元素的数组元素。

这两种零食有时都很方便,但在花了半天时间发现第二种(是的,有记录)之后,我有了一些痛苦的回忆:-)

对应的jQuery是.map()(参见文档)

如果在Prototype中你有:

['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'