开发者

How to make a foldl on the values returned by a selector in jQuery?

Say I have some HTML elements:

<div>First</div>
<div>Second</div>
<div>Third</div>

Whose content I select via a:

$('div').text();

How can I make a "foldl" operation on the elements 开发者_C百科(iterate, accumulating a result), for example to join them using a newline?

$('div').text().foldl('', function(){ ... join_or_whatever ... })


According to the Wikipedia article on folding, JavaScript's Array.reduce() (for foldl) and Array.reduceRight() (for foldr) functions provide array folding.

So your specific task becomes:

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

Note that not all implementations of JavaScript support reduce and reduceRight, so see this example implementation if needed.

UPDATED: Since jQuery doesn't return a true array for $(selector) and some platforms do not support reduce and reduceRight on jQuery's "array-like" collection, I've updated the answer to use $.makeArray() as suggested below. Thanks to @royas for the catch.


I'm not sure what foldl is but

here's how you iterate and concatenate:

var newArray = [];
//'div' is an outer container of your inner divs
$('div').each(function(index, Element) {
    newArray.push($(this).text());
});

$('body').append(newArray.join(''));


I think I understand what you mean by "foldl", not sure... But try this:

var finalStr = "";
$('div').each(function(index) {
   finalStr += $(this).text() + "<br>";
});

Available at: http://api.jquery.com/each/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜