如何在jQuery中的选择器返回的值上进行foldl?

Rob*_*loi 3 javascript jquery functional-programming fold

说我有一些HTML元素:

<div>First</div>
<div>Second</div>
<div>Third</div>
Run Code Online (Sandbox Code Playgroud)

我选择的内容是:

$('div').text();
Run Code Online (Sandbox Code Playgroud)

如何对元素进行"foldl"操作(迭代,累积结果),例如使用换行符连接它们?

$('div').text().foldl('', function(){ ... join_or_whatever ... })
Run Code Online (Sandbox Code Playgroud)

Rob*_*sch 5

根据Wikipedia关于折叠的文章,JavaScript的Array.reduce()(用于foldl)和Array.reduceRight()(用于foldr)函数提供了数组折叠.

所以你的具体任务变成:

var result = $.makeArray($('div')).reduce(function(prev,curr){ 
        return prev + '\n' + $(curr).text() 
});
Run Code Online (Sandbox Code Playgroud)

请注意,并非所有JavaScript实现都支持reduce和reduceRight,因此如果需要,请参阅此示例实现.

更新:由于jQuery没有为$(选择器)返回一个真正的数组,并且某些平台不支持jQuery的"类似数组"集合上的reduce和reduceRight,我已经更新了使用$ .makeArray()的答案,如下所示.感谢@royas的捕获.