Nic*_*nco 13 javascript underscore.js
我在Javascript中寻找相当于Ruby的Enumerable#each_slice.
我已经在使用了包含each(),map(),inject()的伟大的underscore.js ...
基本上,在Ruby中,这个好方法可以做到这一点:
[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]
Run Code Online (Sandbox Code Playgroud)
Bra*_*dan 11
这个怎么样:
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);
});
Run Code Online (Sandbox Code Playgroud)
输出(在Node.js中):
[ 1, 2, 3 ]
[ 4, 5, 6 ]
[ 7, 8, 9 ]
[ 10 ]
Run Code Online (Sandbox Code Playgroud)
Mar*_*eed 11
我会略微修改Brandan的答案以适应JavaScript和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);
} }});
Run Code Online (Sandbox Code Playgroud)
这是一个演示.
我_.chunk在 lodash 中发现现在是一个更好的解决方案
var chunk = require('lodash/array/chunk');
_.chunk(['a', 'b', 'c', 'd'], 2);
// -> [['a', 'b'], ['c', 'd']]
Run Code Online (Sandbox Code Playgroud)