简体   繁体   中英

How to group every 2nd and 3rd items of an array into sub-arrays?

I have an array of objects

const objects = [a, b, c, d, e, f, g ... ]

and I want them to turn into

const result = [a, [b, c], d, [e, f], g ... ]

Any ideas?

[Edit] My apologies. This is my first post, didn't know I have to show my attempts. I don't think I deserve the mean comments either, be nice people. I solved it after a head-banging 4 hours. Here is my solution:

const result = []
     const method = array => {
         for (let i = 0; i < array.length; i += 3) {
             const set = new Set([array[i + 1], array[i + 2]])
             if (i !== array.length - 1) {
                 result.push(array[i])
                 result.push(Array.from(set))
             } else {
                 result.push(array[i])
             }
         }
     }

Thanks for the responses guys! I read every single one of them.

You could take a while loop and push either an item or a pair of items.

 var array = ['a', 'b', 'c', 'd', 'e', 'f', 'g'], grouped = [], i = 0; while (i < array.length) { grouped.push(array[i++]); if (i >= array.length) break; grouped.push(array.slice(i, i += 2)); } console.log(grouped);

You can do this with plain for loop and % modulo operator.

 const objects = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] const result = [] for(let i = 0; i < objects.length; i++) { if(i % 3 === 0) { const arr = objects.slice(i + 1, i + 3) result.push(objects[i]) if(arr.length) result.push(arr) } } console.log(result)

this is my solution:

const objects = ["a", "b", "c", "d", "e", "f", "g"];
let result = [];
let toGroup = false;
for(let i = 0; i < objects.length ; i++){
    if(toGroup){
        result.push([objects[i], objects[++i]]);
    }
    else result.push(objects[i]);
    toGroup = !toGroup;
}

this has a particular case that you have not specified, where it doesn't work, for example if inside objects there are 2 elements, and so i don't know what you would like to do in that case

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM