I am looking for an equivalent of Ruby's Enumerable#each_slice in Javascript.
I am already using the great underscore.js that has each(), map(), inject()...
Basically, in Ruby this great method does this :
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].each_slice(3) {|a| p a}
# outputs below
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
How about this:
Array.prototype.each_slice = function (size, callback){
for (var i = 0, l = this.length; i < l; i += size){
callback.call(this, this.slice(i, i + size));
}
};
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].each_slice(3, function (slice){
console.log(slice);
});
Output (in Node.js):
[ 1, 2, 3 ]
[ 4, 5, 6 ]
[ 7, 8, 9 ]
[ 10 ]
I would modify Brandan's answer slightly to fit better within the environment of JavaScript plus underscore.js:
_.mixin({ "eachSlice": function(obj, size, iterator, context) {
for (var i=0, l=obj.length; i < l; i+=size) {
iterator.call(context, obj.slice(i,i+size), i, obj);
} }});
Here's a demo.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With