如何将数组分成n个组?(因子化,或_.partition数组)

10 浏览
0 Comments

如何将数组分成n个组?(因子化,或_.partition数组)

假设我有一个数组 = [0,1,2,3,4,5,6],我想要根据除以3后的余数将其“分割”成3个数组。

基本上我想要的是:

_.my_partition([0,1,2,3,4,5,6], function(item) {return item % 3;})
// [[0,3,6], [1,4],[2,5]]

(如果有帮助的话,我可以使用lodash、underscore...)

0
0 Comments

如何将数组分成n个组?(因子化,或者_.partition数组)出现的原因是需要将一个数组按照指定的组数进行分割。下面提供了三种解决方法。

第一种方法是使用普通函数。代码如下:

function partition(items, n) {
    var result = _.groupBy(items, function(item, i) {
        return Math.floor(i % n);
    });
    return _.values(result);
}
myArray = [1,2,3,4,5,6,7,8,9,10];
partition(myArray, 3);

第二种方法是添加一个原型方法。代码如下:

Array.prototype.partition = function(n) {
    var result = _.groupBy(this, function(item, i) {
        return Math.floor(i % n);
    });
    return _.values(result);
}
myArray = [1,2,3,4,5,6,7,8,9,10];
myArray.partition(3)

第三种方法是创建一个_.partitionToGroups方法。代码如下:

_.partitionToGroups = function(items, n) {
    var result = _.groupBy(items, function(item, i) {
        return Math.floor(i % n);
    });
    return _.values(result);
}
myArray = [1,2,3,4,5,6,7,8,9,10];
_.partitionToGroups(myArray, 3);

需要注意的是,第三种方法可能会与lodash中已有的partition()函数冲突。因此,可以将其命名为partitionToGroups。

在lodash 4中,groupBy回调函数中的index参数被移除,因此需要自行跟踪索引。

需要注意的是,第一种方法的普通函数没有进行任何分割操作。将代码复制粘贴到控制台中,输出结果是一个包含10个元素的数组,而不是分割后的数组。

0