Преобразование Javascript в LEFT OUTER JOIN Результат запроса - PullRequest
0 голосов
/ 17 февраля 2019

Я использую node-postgres для получения результатов запроса LEFT OUTER:

SELECT S.SEASON_ID, S.SEASON_NAME, I.ITEM_NAME, I.NOTE FROM T_SEASON S LEFT OUTER JOIN T_ITEM I ON S.SEASON_ID = I.SEASON_ID;

Набор результатов будет выглядеть следующим образом:

[
 {
   season_id:1, 
   season_name: "season 1", 
   item_name:"item1", 
   item_note: "text"
 }, 
 {
   season_id:1, 
   season_name: "season 1", 
   item_name:"item2", 
   item_note: "text"
 }, 
 {
   season_id:2, 
   season_name: "season 2", 
   item_name:"item3", 
   item_note: "text"
 }
]

Что мне нужночтобы сделать это разбить его на массив объектов «сезон» следующим образом:

[
 {
   seasonId: 1, 
   season_name: "season 1", 
   items: [
      {item_name: "item1", item_note: "text"},
      {item_name: "item2", item_note: "text"}
   ]
 }, 
 {
   seasonId: 2, 
   season_name: "season2", 
   items: [
      {item_name: "item3", item_note: "text"}
   ]
 }
]

В словах порядка, «элемент» является дочерней коллекцией объекта сезона.

Яищу самый простой способ сделать это.Лодаш доступен для меня.

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать уменьшить

Создать ключ на основе season_id.проверьте, существует ли ключ, если он существует, чем push-значение в элементах этого конкретного ключа, если нет, то создайте новый ключ с соответствующими значениями.В конце просто возьмите значения из объекта, чтобы получить желаемый результат.

let data = [{season_id:1, season_name: "season 1", item_name:"item1", item_note: "text"}, {season_id:1, season_name: "season 1", item_name:"item2", item_note: "text"}, {season_id:2, season_name: "season 2", item_name:"item3", item_note: "text"}]

let output = data.reduce(( op, {season_id, item_name, item_note, season_name }) => {
  if(op[season_id]){
    op[season_id].items.push({item_name,item_note})
  } else {
    op[season_id] = {
      season_id,
      season_name,
      items: [{item_name,item_note}]
    }
  }
  return op
},{})

console.log(Object.values(output))
...