如何将数组(对象)划分或划分为特定数量的块,可能使用lodash

时间:2018-02-14 18:02:27

标签: javascript lodash

我尝试了几种但没有按预期得到结果。

假设我有这样的对象数组:

var users = [
  { 'user': 'barney', 'age': 36, 'active': false },
  { 'user': 'fred',   'age': 40, 'active': true },
  ... and so on (n lenght) ...
];

我想把它们分成两组或三组。如果我有100个对象并且我喜欢将它们分成3组,那么第一组和第二组的结果应该包含33个对象,最后一组应该包含34个对象(或者任何其他最好的剩余对象分配方式)。

我尝试使用lodash的块,但这样做完全不同:)

console.log(_.chunk(users, 2)) // this will create 50 chunks of 2 objects

编辑我的问题以解释更多信息。

var my arrayOfObj = [1,2,3,4,5,6,7,8,9,10]
myArray.dividThemIn(3) // when run this, I am getting chunks like below
[{1,2,3}, {4,5,6}, {7,8,9}, {10}] // I am finding code that does this
[{1,2,3,4}, {5,6,7,8}, {9,10}] // But I need the code that does this

3 个答案:

答案 0 :(得分:1)

将数组的长度除以所需的块数(向上舍入),并将 传递给_.chunk作为第二个参数:

var arrayOfObj = [1,2,3,4,5,6,7,8,9,10];
var chunks = _.chunk(arrayOfObj, Math.ceil(arrayOfObj.length / 3));
console.log(JSON.stringify(chunks)); //[[1,2,3,4],[5,6,7,8],[9,10]] 

答案 1 :(得分:0)

你可以使用这样的东西。

function chunk (arr, chunks) {
    var chunked = [];
    var itemsPerChunk = Math.ceil(arr.length / chunks);

    while (arr.length > 0) {
        chunked.push(arr.slice(0, itemsPerChunk));
    }

    return chunked;
}

var data = [1,2,3,4,5,6,7,8,9,10];

chunk(data, 3);
// [[1,2,3,4], [5,6,7,8], [9,10]]

答案 2 :(得分:-1)

如果您只想将它​​们分成3组而没有任何标准。

function splitIntoThree(arr){
  let result = [[],[],[]],
      thirds = Math.ceil(arr.length/3);

  arr.forEach((obj,index) => {
    if(index < thirds){
      result[0].push(obj);
    } else if(index < 2*thirds) {
      result[1].push(obj);
    } else {
      result[2].push(obj);
    }
  });

  return result;
}