如何使用lodash重塑数组

sha*_*unc 2 javascript lodash

我想知道lodash用于重塑数组的习惯用法是什么?

基本上,我正在寻找能够改变这个数组的东西:[1,2,3,4,5,6,7,8]到这一个(在这种情况下,我们将每个数组分组,但我们假设我们是每个N)分组[[1,2,3],[4,5,6],[7,8]]

我不太清楚如何在纯js中完成这个,但是我在lodash中重写它的所有尝试都很好,毕竟不太可读.

Den*_*nis 6

简单的解决方案:

function reshape(array, n){
    return _.compact(array.map(function(el, i){
        if (i % n === 0) {
            return array.slice(i, i + n);
        }
    }))
}
Run Code Online (Sandbox Code Playgroud)

一个简单的递归解决方案:

function reshape(array, n) {
    if (array.length === 0)
        return [];
    return [_.take(array, n)].concat(reshape(_.rest(array, n), n));
}
Run Code Online (Sandbox Code Playgroud)


Cro*_*pha 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]]

https://lodash.com/docs#chunk

https://lodash.com/docs#zip