简体   繁体   English

具有键值的 JSON 对象的数组格式

[英]Array formatting of JSON objects with key values

I have an array with below format, I am trying to remove duplicate keys and merge it to one.我有一个以下格式的数组,我正在尝试删除重复的键并将其合并为一个。 Please let me know how to achieve this.请让我知道如何实现这一目标。

[
  {"tablename":"table1","tablecolumns":"yes"},
  {"tablename":"table1","columnname":"column1"},
  {"tablename":"table1","columnname":"col2"},
  {"tablename":"table2","tablecolumns":"yes"},
  {"tablename":"table2","columnname":"column3"},
  {"tablename":"table2","columnname":"col4"}
]

expected format:预期格式:

[
    {"tablename":"table1","tablecolumns":"yes","columnname":"column1","columnname":"col2"},
    {"tablename":"table2","tablecolumns":"yes","columnname":"column3","columnname":"col4"}
]

You can use reduce method:您可以使用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;
},{})

An example:一个例子:

 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));

UPDATE:更新:

If you have an additional tag datatype , then you can use the following code snippet:如果您有一个额外的标签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));

So I have mentioned in my comment below your question you can't have the same property name for an object as you expect - columnname .因此,我在您的问题下方的评论中提到,对象的属性名称不能与您期望的相同 - columnname

Instead I suggest to have a different structure and store the column names in an array.相反,我建议使用不同的结构并将列名存储在数组中。

Like the following:像下面这样:

 const data = [ {"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 = data.reduce((a,c) => { const foundelem = a.find(e => e.tablename === c.tablename); if (foundelem) { foundelem.columnnames.push(c.columnname); } else { a.push({ tablename: c.tablename, tablecolumns: c.tablecolumns, columnnames: [] }); } return a; }, []); console.log(result);

I hope that helps!我希望这有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何替换 JSON 对象数组中某个键的所有值 - How to substitute all values of a certain key in an array of JSON objects 如何使用 JavaScript 中的键值处理 JSON 对象数组 - How to process JSON Array of objects using Key values in JavaScript 创建一个具有键值数组的空状态对象,该键值数组以JSON对象作为值,然后更改这些json对象 - creating an empty state object that has a key value array with JSON objects as the values and than changing those json objects 根据 javascript 中的键值将 3 个不同的 json 数组对象合并到单个 json 数组中 - merge 3 different json array objects into a single json array based on key values in javascript 如何在一个键下对 JSON 数组中的所有对象的键下存在的值进行分组? - How do I group values present under a key in all objects in an array of JSON, under a single key? 在不知道键名的情况下从对象的JSON数组中获取键/值 - Get key/values from JSON array of objects without knowing the key name 获取JSON对象数组中的值 - Get values in an array of JSON objects 无法用另一个角度数组值列表更新数组中json对象的键值 - Unable to update the key value of json objects in an array with another list of array values in angular 获取JSON数组中的键值 - Get key values in JSON array 将对象数组转换为具有键值的数组 - Convert an array of objects into an array with key values
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM