简体   繁体   English

将树结构json转换为线性json

[英]convert tree structure json to linear json

here I have a tree of objects like the following, perhaps created using the excellent algorithm在这里,我有一个像下面这样的对象树,可能是使用优秀的算法创建的

 tableList = [
      {
        repo_id: 1,
        databasename: "IES",
        repo_name: "IES.dbo.BuildVersion",
        schema_name: "dbo",
        table_name: "BuildVersion",
        column_name: [
          "Database Version",
          "ModifiedDate",
          "SystemInformationID",
          "VersionDate",
          "datetime",
        ],
        datatype: ["nvarchar", "datetime", "tinyint", "datetime", "tinyint"],
      },
    ];

and the datatype values and the column_name values are correspondent to each other i mean,,column_name :Database Version is of datatype "nvarchar" and so on.并且数据类型值和 column_name 值彼此对应,我的意思是,column_name :Database Version 是数据类型“nvarchar”等等。 so how can i convert it to flat array of objects like below那么我如何将其转换为如下所示的平面对象数组

tableList = [
  {
    repo_id: 1,
    databasename: "IES",
    repo_name: "IES.dbo.BuildVersion",
    schema_name: "dbo",
    table_name: "BuildVersion",
    column_name: "Database Version",
    datatype: "nvarchar",
  },
  {
    repo_id: 1,
    databasename: "IES",
    repo_name: "IES.dbo.BuildVersion",
    schema_name: "dbo",
    table_name: "BuildVersion",
    column_name: "ModifiedDate",
    datatype: "tinyint",
  },
  {
    repo_id: 1,
    databasename: "IES",
    repo_name: "IES.dbo.BuildVersion",
    schema_name: "dbo",
    table_name: "BuildVersion",
    column_name: "SystemInformationID",
    datatype: "tinyint",
  },
  {
    repo_id: 1,
    databasename: "IES",
    repo_name: "IES.dbo.BuildVersion",
    schema_name: "dbo",
    table_name: "BuildVersion",
    column_name: "VersionDate",
    datatype: "datetime",
  },
  {
    repo_id: 1,
    databasename: "IES",
    repo_name: "IES.dbo.BuildVersion",
    schema_name: "dbo",
    table_name: "BuildVersion",
    column_name: "datetime",
    datatype: "tinyint",
  }
];

You can use a map statement.您可以使用map语句。

tableListReformatted = tableList[0].datatype.map( (datatype, index) => {

  const {
    repo_id,
    databasename,
    repo_name,
    schema_name,
    table_name
  } = tableList[0] 

  return {
    repo_id,
    databasename,
    repo_name,
    schema_name,
    table_name,
    column_name: tableList[0].columnName[index],
    datatype
  }

})

If you wanted to flatten a tableList that has many entries, you could do this process for each entry and push the results to an array:如果您想展平具有许多条目的tableList ,您可以对每个条目执行此过程并将结果推送到数组:

// create empty array to start
const tableListReformatted = []

tableList.forEach( listItem => {

  // for each item in the tableList, create an array
  // of objects which is mapped from the .datatype property
  const flattenedItems = listemItem.dataType.map( (datatype, index) => {

    return {
      ...listItem // use all the existing properties
      column_name: listItem.columnName[index], // overwrite column_name
      datatype // overwrite datatype
    }

  })

  // spread that array into the empty starter array
  tabeListeReformatted.push(...flattenedItems)

})

This may need some tweaking, but your question is relatively simple and this is all great array-manipulation practice.这可能需要一些调整,但你的问题相对简单,这都是很好的数组操作实践。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM