![](/img/trans.png)
[英]JavaScript: Convert linear JSON array into tree structure with unknown depth
[英]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.