功能风格的分块对象(Underscore/Lodash)
Chunking Objects in functional style (Underscore/Lodash)
Lodash 有一个很好的 chunk 数组方法;对象(关联数组)是否有等价物?命令式解决方案非常简单,但我很好奇是否有更简洁的功能实现?
强制解决方案:
接受一个对象作为输入
Returns 具有 size
个属性的对象数组
var chunk = function(input, size){
var obj = {};
var output = [];
var counter = 0;
for (var k in input) {
if(!input.hasOwnProperty(k)){
continue;
}
obj[k] = input[k];
if (++counter % size === 0) {
output.push(obj);
obj = {};
}
}
if (Object.keys(obj).length !== 0){
output.push(obj);
}
return output;
};
_.mixin({"chunkObj": function(input, size) {
return _.chain(input).pairs().chunk(size).map(_.object).value();
}});
console.log(_.chunkObj({a:1,b:2,c:3,d:4,e:5}, 2))
Lodash 有一个很好的 chunk 数组方法;对象(关联数组)是否有等价物?命令式解决方案非常简单,但我很好奇是否有更简洁的功能实现?
强制解决方案:
接受一个对象作为输入
Returns 具有 size
个属性的对象数组
var chunk = function(input, size){
var obj = {};
var output = [];
var counter = 0;
for (var k in input) {
if(!input.hasOwnProperty(k)){
continue;
}
obj[k] = input[k];
if (++counter % size === 0) {
output.push(obj);
obj = {};
}
}
if (Object.keys(obj).length !== 0){
output.push(obj);
}
return output;
};
_.mixin({"chunkObj": function(input, size) {
return _.chain(input).pairs().chunk(size).map(_.object).value();
}});
console.log(_.chunkObj({a:1,b:2,c:3,d:4,e:5}, 2))