Как сгруппировать объекты в массиве?

Добрый день! Подскажите пожалуйста, как это можно сделать?
Есть массив объектов:
records =[
  {'name': 'Pink Floyd The Dark Side of the Moon'},
  {'year': '1973'},
  {'country':  'london'},
  {'date': 'March 24'},
  {'type': 'music album'},
]


Как сделать, чтобы каждые 5 объектов в массиве преобразовались в один объект: мне надо из 5 объектов сделать 1, с указанными полями (пока не закончится длина массива). Я знаю как сделать объединение через spread или Object.assign, ну как это применить конкретно в моем случае, я не знаю. Подскажите, пожалуйста
  • Вопрос задан
  • 128 просмотров
Решения вопроса 3
dollar
@dollar
Делай добро и бросай его в воду.
Серьёзно? Это задача для начинающего.
Императивно и в лоб: перебираете все элементы массива в цикле, по ходу дела создаёте нужные вам группы.
как-то так
let result = [];
let num = 0;
let obj;
records.forEach(e => {
  if (num++ === 0) result.push(obj = {});
  Object.assign(obj, e);
  if (num === 5) num = 0;
});
console.log(result);
//но можно сделать короче и красивее
Ответ написан
Anopeng
@Anopeng
Веб-программист, учу фронт и бек
function concatObjects(arr) {
    const obj = {};
    arr.forEach(function (el) {
        Object.assign(obj, el);
    });
    return obj;
}

console.log(concatObjects(records));
Ответ написан
Комментировать
black1277
@black1277
Вольный стрелок
накидал по быстрому
const records =[
  {'name' :'Pink Floyd The Dark Side of the Moon'},
  {'year': '1973'},
  {'country': 'london'},
  {'date': 'March 24'},
  {'type':'music album'},
  {'name' :'Dark Side of the Moon'},
  {'year': '1986'},
  {'country': 'paris'},
  {'date': 'March 14'},
  {'type':'video album'},
]
// сначала разбиваем на массив по 5 объектов
const nz = records.reduce((acc,c,i,arr) => {
  if ((i % 5) === 0) acc.push([]);
  acc[acc.length - 1].push(c);
  return acc;
}, [])
// затем сливаем объекты
const rez = nz.map(ob=>{
  return Object.assign({}, ...ob)
})
//  результат
console.log(rez)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы