Как объединить объекты JSON с одинаковыми именами? - PullRequest
0 голосов
/ 01 июля 2018

Я искал дни и дни, но не могу найти ответ на этот вопрос.

Допустим, у меня есть база данных, которая содержит информацию о том, сколько килограммов ингредиентов используется в каждой комнате дома, в зависимости от времени года, и шеф-повара, который их использует, хотя шеф-повар используется только в Пункт "ГДЕ" Эта информация собирается веб-приложением (не разработанным мной) и сохраняется в его базе данных. Я пытаюсь расширить приложение, создавая несколько новых страниц и отчетов, в основном только для отображения информации. Вывод SQL (Oracle) выглядит следующим образом (я опустил несколько столбцов, не представляющих интереса):

| ROOM_ID | SEASON | ING_S1 | ING_S2 | ING_S3 |
| 1234567 |   1    |   35   |        |        |
| 1234567 |   2    |        |   24   |        |
| 1234567 |   3    |        |        |   15   |
| 2233445 |   2    |        |   60   |        |
| 2233445 |   3    |        |        |   41   |

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

Это веб-приложение позволяет мне в HTML поместить это в JSON, и мне удалось сделать так:

"1234567" : {
    "roomName" : "blabla",
    "season" : "1",
    "ingredientsS1" : "35",
    "ingredientsS2" : "",
    "ingredientsS3" : "",
},
"1234567" : {
    "roomName" : "blabla",
    "season" : "2",
    "ingredientsS1" : "",
    "ingredientsS2" : "24",
    "ingredientsS3" : "",
},
"1234567" : {
    "roomName" : "blabla",
    "season" : "3",
    "ingredientsS1" : "",
    "ingredientsS2" : "",
    "ingredientsS3" : "15",
},

И так далее ...

Я бы хотел видеть:

"1234567" : {
    "roomName" : "blabla",
    "ingredientsS1" : "35",
    "ingredientsS2" : "24",
    "ingredientsS3" : "15",
},

Не могу при жизни понять, как объединить свойства каждого объекта, определенного roomID! Я попытался переделать запрос миллионами способов, чтобы увидеть, смогу ли я объединить все результаты в одну строку (listagg и т. Д.) И, таким образом, сделать так, чтобы веб-приложение создавало только один объект JSON, я попытался найти решения используя jQuery и простой JavaScript ... без кубиков.

Я также собираюсь начать использовать Vue.js для добавления некоторых дополнительных функций на страницу, но я также не могу найти никакого решения на этом пути.

Любая помощь приветствуется и спасибо за ваше время!

1 Ответ

0 голосов
/ 01 июля 2018

Предполагая, что вы получаете данные как объект из базы данных, вы можете перебирать объекты и получать свойства для нового объекта.

Для присвоения значения вы можете взять SEASON для адресации соответствующих ингредиентов.

var data = [
        { ROOM_ID: 1234567, SEASON: 1, ING_S1: 35, ING_S2: null, ING_S3: null },
        { ROOM_ID: 1234567, SEASON: 2, ING_S1: null, ING_S2: 24, ING_S3: null },
        { ROOM_ID: 1234567, SEASON: 3, ING_S1: null, ING_S2: null, ING_S3: 15 },
        { ROOM_ID: 2233445, SEASON: 2, ING_S1: null, ING_S2: 60, ING_S3: null },
        { ROOM_ID: 2233445, SEASON: 3, ING_S1: null, ING_S2: null, ING_S3: 41 }
    ],
    result = {};

data.forEach(({ ROOM_ID, SEASON, ING_S1, ING_S2, ING_S3 }) => {
    result[ROOM_ID] = result[ROOM_ID] || { roomName: 'blabla', ingredientsS1: '', ingredientsS2: '', ingredientsS3: '' };
    result[ROOM_ID]['ingredientsS' + SEASON] = [ING_S1, ING_S2, ING_S3][SEASON - 1];
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...