簡體   English   中英

將樹結構json轉換為線性json

[英]convert tree structure json to linear json

在這里,我有一個像下面這樣的對象樹,可能是使用優秀的算法創建的

 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"],
      },
    ];

並且數據類型值和 column_name 值彼此對應,我的意思是,column_name :Database Version 是數據類型“nvarchar”等等。 那么我如何將其轉換為如下所示的平面對象數組

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",
  }
];

您可以使用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
  }

})

如果您想展平具有許多條目的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)

})

這可能需要一些調整,但你的問題相對簡單,這都是很好的數組操作實踐。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM