javascript - 具有键值的 JSON 对象的数组格式
问题描述
我有一个具有以下格式的数组,我正在尝试删除重复的键并将其合并为一个。请让我知道如何实现这一目标。
[
{"tablename":"table1","tablecolumns":"yes"},
{"tablename":"table1","columnname":"column1"},
{"tablename":"table1","columnname":"col2"},
{"tablename":"table2","tablecolumns":"yes"},
{"tablename":"table2","columnname":"column3"},
{"tablename":"table2","columnname":"col4"}
]
预期格式:
[
{"tablename":"table1","tablecolumns":"yes","columnname":"column1","columnname":"col2"},
{"tablename":"table2","tablecolumns":"yes","columnname":"column3","columnname":"col4"}
]
解决方案
您可以使用reduce
方法:
const result = arr.reduce((a, {tablename, tablecolumns, columnname}) => {
a[tablename] = a[tablename] || {tablename, tablecolumns, columnnames: []};
if (columnname)
a[tablename].columnnames.push(columnname);
return a;
},{})
一个例子:
let arr = [
{ "tablename": "table1", "tablecolumns": "yes" },
{ "tablename": "table1", "columnname": "column1" },
{ "tablename": "table1", "columnname": "col2" },
{ "tablename": "table2", "tablecolumns": "yes" },
{ "tablename": "table2", "columnname": "column3" },
{ "tablename": "table2", "columnname": "col4" }
];
const result = arr.reduce((a, {tablename, tablecolumns, columnname}) => {
a[tablename] = a[tablename] || {tablename, tablecolumns, columnnames: []};
if (columnname)
a[tablename].columnnames.push(columnname);
return a;
},{})
console.log(Object.values(result));
更新:
如果你有一个额外的标签datatype
,那么你可以使用下面的代码片段:
let arr = [
{"tablename":"table1","tablecolumns":"yes"},
{"tablename":"table1","columnname":"col1","datatype":"Alphabetic"},
{"tablename":"table2","tablecolumns":"yes"},
{"tablename":"table2","columnname":"tabl2_colu","datatype":null},
{"tablename":"table2","columnname":"tab2_col2","datatype":"Numeric"}
];
const result = arr.reduce((a, {tablename, tablecolumns, columnname, datatype}) => {
a[tablename] = a[tablename] || {tablename, tablecolumns, columns: []};
if (columnname)
a[tablename].columns.push({columnname, datatype});
return a;
},{})
console.log(Object.values(result));
推荐阅读
- reactjs - 重启 Ubuntu 服务器时运行 React
- angular6 - Angular 6 canActivate 部署中的问题
- java - 单元测试:测试具有外部方法的类
- c++ - C++不能使用从基类继承的getter函数
- mysql - 如何在带有 node.js 的 typescript-sequelize 中使用“或”选项?
- angular - 模态关闭和表单值重置在 Angular 中不起作用
- mariadb - 如何在 RHEL 7 服务器上安装 MariaDB?
- angular - 单击眼睛图标时,Angular Ionic 3 输入将注意力集中在密码字段上
- spring-boot - 正在创建的未知线程池
- c# - 使用 C# 使用调酒师动态更改数据源