3

我想知道 lodash 中用于重塑数组的成语是什么?

基本上,我正在寻找可以将这个数组: [1, 2, 3, 4, 5, 6, ,7, 8] 转换为这个数组的东西(在这种情况下,我们已经将每个 3 分组,但假设我们是将每个 N) [[1, 2, 3], [4, 5, 6], [7, 8]] 分组

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

4

3 回答 3

7

一个简单的解决方案:

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));
}
于 2013-10-04T10:24:44.650 回答
5

有点晚了,但作为一个额外的例子,你可以使用 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] ]

https://lodash.com/docs#chunk

https://lodash.com/docs#zip

于 2015-05-26T08:35:37.387 回答
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;
    });
}
于 2014-03-13T10:24:03.040 回答