5

I tried couple of way but not getting the result as expected.

Say that I have array of objects like this:

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

I wanted to divide them into two or three groups. If I have 100 objects and I like them to be divided in 3 groups, then the result with first and second group should contain 33 objects and the last group should contain 34 objects (or any other best possible way remaining objects distributed).

I tried to use lodash's chunk but that does things completly different :)

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

Edited my question to explain more.

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
4
  • Possible duplicate of Split array into chunks Commented Feb 14, 2018 at 18:04
  • Please do some research before asking.. there are at least a few duplicates of this exact question on SO. Commented Feb 14, 2018 at 18:05
  • @Occam'sRazor, I did research, either I am doing something wrong or for my luck I am not getting I want. Anyhow, Edited my question to explain more, kindly have a look. Commented Feb 14, 2018 at 20:28
  • @GeorgeJempty - How is it more than chunking an array? it's an exact duplicate as far as I can tell.. this is the code given in the other answer, applied to his example and it provides the exact requested results. - maybe if i knew what the lodash chunk function did i would understand the question better Commented Feb 14, 2018 at 20:49

3 Answers 3

8

Divide the length of the array by the number of chunks you want (rounding up), and pass that into _.chunk as the second parameter:

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]] 
Sign up to request clarification or add additional context in comments.

Comments

-1

If you just want to split them into 3 groups without any criteria.

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;
}

Comments

-1

You could use something like this.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.