我想知道 lodash 中用于重塑数组的成语是什么?
基本上,我正在寻找可以将这个数组: [1, 2, 3, 4, 5, 6, ,7, 8] 转换为这个数组的东西(在这种情况下,我们已经将每个 3 分组,但假设我们是将每个 N) [[1, 2, 3], [4, 5, 6], [7, 8]] 分组
我不太清楚这应该如何在纯 js 中完成,但是我在 lodash 中重写它的所有尝试都很好,毕竟可读性较差。
我想知道 lodash 中用于重塑数组的成语是什么?
基本上,我正在寻找可以将这个数组: [1, 2, 3, 4, 5, 6, ,7, 8] 转换为这个数组的东西(在这种情况下,我们已经将每个 3 分组,但假设我们是将每个 N) [[1, 2, 3], [4, 5, 6], [7, 8]] 分组
我不太清楚这应该如何在纯 js 中完成,但是我在 lodash 中重写它的所有尝试都很好,毕竟可读性较差。
一个简单的解决方案:
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));
}
有点晚了,但作为一个额外的例子,你可以使用 zip。
例如:
.zip.apply( , _.chunk("你的数组", "columns"));
这是如何工作的:
假设您有一个数组 = [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] ]
您也可以使用_.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;
});
}