Массив объектов, сгруппированный по родительскому объекту - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть массив объектов.Я хочу иметь возможность группировать объекты в родительском объекте, родительский объект определяется broker: true.Есть ли способ преобразовать это:

const data = [
    { id: 1, broker: true },
    { id: 2, broker: false },
    { id: 3, broker: false },
    { id: 4, broker: true },
    { id: 5, broker: false },
    { id: 6, broker: true },
    { id: 7, broker: false },
    { id: 8, broker: false },
    { id: 9, broker: false },
  ];

в что-то вроде этого:

const data = [
    { id: 1, broker: true, chunks: [
      { id: 2, broker: false },
      { id: 3, broker: false },
    ]},
    { id: 4, broker: true, chunks: [
      { id: 5, broker: false },
    ]},
    { id: 6, broker: true, chunks: [
      { id: 7, broker: false },
      { id: 8, broker: false },
      { id: 9, broker: false },
    ]},
  ];

Ответы [ 4 ]

0 голосов
/ 23 ноября 2018

Вы просматриваете ключи каждого объекта

Object.keys(data).forEach(key => {
  console.log(data[index].property)
})

найдено

0 голосов
/ 23 ноября 2018

Вы можете проверить правильность для broker и поместить новый объект в набор результатов или передать объект в массив кусков предыдущего объекта.

const
    data = [{ id: 1, broker: true }, { id: 2, broker: false }, { id: 3, broker: false }, { id: 4, broker: true }, { id: 5, broker: false }, { id: 6, broker: true }, { id: 7, broker: false }, { id: 8, broker: false }, { id: 9, broker: false }],
    grouped = data.reduce((r, o) => {
        if (o.broker) {
            r.push(Object.assign({}, o, { chunks: [] }));
        } else {
            r[r.length - 1].chunks.push(o);
        }
        return r;
    }, []);

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 23 ноября 2018

Используйте reduce для добавления к аккумулятору каждый раз, когда он встречается со значением true, а если он встречается со значением false, добавляйте к предыдущему объекту через свойство chunks

* 1006.*

const data = [
    { id: 1, broker: true },
    { id: 2, broker: false },
    { id: 3, broker: false },
    { id: 4, broker: true },
    { id: 5, broker: false },
    { id: 6, broker: true },
    { id: 7, broker: false },
    { id: 8, broker: false },
    { id: 9, broker: false },
  ];

let result = data.reduce((a, cv) => {
let len = a.length - 1;
return  (cv["broker"]) ? (a.push(cv), a) : (a[len]["chunks"] || (a[len]["chunks"] = []), a[len]["chunks"].push(cv), a);
}, []);

console.log(result);
0 голосов
/ 23 ноября 2018

Вы должны пройти через массив, создать новый и оценить необходимое условие, если оно выполнено, поместить его в новый массив

Object.keys(data).forEach((value, index) => {

  // code

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...