如何合并具有相同名称的JSON对象?

时间:2018-07-01 17:51:50

标签: javascript jquery sql oracle vue.js

我一直在搜索,但是似乎找不到答案。

比方说,我有一个数据库,其中包含有关房子每个房间使用多少公斤配料的信息(取决于一年中的季节)以及使用这些配料的厨师,尽管该厨师仅用于“ WHERE”子句。此信息由Web应用程序(不是由我开发)收集,并存储在其数据库中。我试图通过创建一些新页面和报告来扩展应用程序,主要是为了显示信息。 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   |

成分列来自一系列非常复杂的联接,需要从应用程序中的其他表中提取它们。

此Web应用程序允许我在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等),从而使Web应用程序仅创建一个JSON对象,我试图查看解决方案使用jQuery和普通JavaScript ...没有骰子。

我也将开始使用Vue.js向页面添加更多功能,但是我似乎也找不到在该路线上的任何解决方案。

感谢您的帮助,感谢您的宝贵时间!

1 个答案:

答案 0 :(得分:0)

假设您从数据库中获取数据作为对象,则可以迭代这些对象并获取新对象的属性。

要分配值,您可以使用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; }