Как сгруппировать каждый 2-й и 3-й элементы массива в подмассивы? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть массив объектов

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

, и я хочу, чтобы они превратились в

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

Есть идеи?

[Редактировать] Мои извинения. Это мой первый пост, не знаю, я должен показать свои попытки. Я не думаю, что заслуживаю и плохих комментариев, будьте хорошими людьми. Я решил это после 4 часов битья головой. Вот мое решение:

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

Спасибо за ответы, ребята! Я читаю каждый из них.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2020

это мое решение:

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

это частный случай, который вы не указали, где он не работает, например, если внутри objects есть 2 элемента, и поэтому я не знаю, что бы вы хотели сделать в этом случае

0 голосов
/ 25 февраля 2020

Вы можете занять некоторое время l oop и pu sh либо предметом, либо парой предметов.

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);
0 голосов
/ 25 февраля 2020

Вы можете сделать это с обычными for l oop и % оператором по модулю.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...