我想知道lodash用于重塑数组的习惯用法是什么?
基本上,我正在寻找改变这个数组的东西: [1,2,3,4,5,6,7,8] 至 这一个(在这种情况下,我们将每个3分组,但我们假设我们将每个N分组) [[1,2,3],[4,5,6],[7,8]]
我不太清楚如何在纯js中完成这个,但是我在lodash中重写它的所有尝试都很好,毕竟不太可读。
答案 0 :(得分:6)
一个简单的解决方案:
function reshape(array, n){
return _.compact(array.map(function(el, i){
if (i % n === 0) {
return array.slice(i, i + n);
}
}))
}
一个简单的递归解决方案:
function reshape(array, n) {
if (array.length === 0)
return [];
return [_.take(array, n)].concat(reshape(_.rest(array, n), n));
}
答案 1 :(得分:5)
有点晚了,但作为一个额外的例子,你可以使用zip。
例如:
.zip.apply(,_。chunk("您的数组","列"));
这是如何运作的:
让我们说你有一个数组= [1,2,3,4,5,6,7,8,9,10,11,12,13,14等]
_.chunk(array,3)会给你[[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13, 14]]
.zip.apply(,_。chunk(array,3));会给你: [[1,4,7,10,13],[2,5,8,11,14],[3,6,9,12]]
答案 2 :(得分:1)
您还可以使用_.transform:
function reshape (array, n) {
return _.transform(array, function (result, el, i, arr) {
return i % n === 0 ? result.push(arr.slice(i, i + n)) : null;
});
}