如何使用lodash重塑数组

时间:2013-10-04 10:17:17

标签: javascript lodash

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

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

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

3 个答案:

答案 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]]

https://lodash.com/docs#chunk

https://lodash.com/docs#zip

答案 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;
    });
}