[英]how to convert an array of objects into single object
我正在從 node.js api 獲取響應數據,格式低於 json 格式,其中我正在使用內部連接加入兩個表。 表 1 有列:id、名稱、描述、層名,表 2 有列 attrName、數據類型。 兩個表之間的一對多關系。
[
{
"id": 788,
"name": "ABC",
"description": "abc",
"layername": "abclayer",
"file_type": "Parquet",
"attrname": "Id",
"datatype": "integer",
"length": 20
},
{
"id": 788,
"name": "ABC",
"description": "abc",
"layername": "abclayer",
"file_type": "Parquet",
"attrname": "Name",
"datatype": "varchar",
"length": 40
}
]
但我需要以下格式的響應數據。 通過為兩個表編寫查詢來獲取數據的正確方法是什么。
{
"name": "ABC",
"description": "abc",
"fieldDetails": [
{
"attributeName": "Id",
"datatype": "integer",
"length": 20
}, {
"attributeName": "Name",
"datatype": "varchar",
"length": 40
},
],
"layername": "abclayer",
"file_type": "Parquet"
}
node.js api 代碼。
getDataById = (dP, id) => {
return new Promise((resolve, reject) => {
const userDBName = dP.DatabaseName + ".\"" + dP.SchamaName + "\"";
const dimTable = dP.DimensionListTable;
const dimConfigTable = dP.DimensionConfigTable;
let query = "Select dim.id, dim.name, dim.description, dim.layername, dim.file_type, dimConfig.attributename, " +
"dimConfig.datatype, dimConfig.length, dimConfig.primarykey, dimConfig.partitionby, dimConfig.start_index " +
"From " + userDBName + "." + dimTable + " dim INNER JOIN " + userDBName + "." + dimConfigTable + " dimConfig " +
"ON dim.id = dimConfig.dim_id and dim.Id = '" + id + "'";
console.log("newwwwQueryyy " + query)
mysql.executeQuery(query).then(result => {
console.log("schemaData" + JSON.stringify(result) + "count" + result.length);
resolve({ "schemaData": result, "count": result.length });
}).catch(err => {
console.log(resolve({ "schemaData": [], "count": 0 }));
})
});
}
您可以使用減少。
const data = [
{
"id": 788,
"name": "ABC",
"description": "abc",
"layername": "abclayer",
"file_type": "Parquet",
"attrname": "Id",
"datatype": "integer",
"length": 20
},
{
"id": 788,
"name": "ABC",
"description": "abc",
"layername": "abclayer",
"file_type": "Parquet",
"attrname": "Name",
"datatype": "varchar",
"length": 40
}
]
const obj = data.reduce((acc, curr) => {
return {
...acc,
fieldDetails: [...acc.fieldDetails, {
attributeName: curr.attrname,
datatype: curr.datatype,
length: curr.length
}]
}
}, {
name: data[0].name,
description: data[0].description,
layername: data[0].layername,
file_type: data[0].file_type,
fieldDetails: []
});
console.log(obj);
const data = [ { "id": 788, "name": "ABC", "description": "abc", "layername": "abclayer", "file_type": "Parquet", "attrname": "Id", "datatype": "integer", "length": 20 }, { "id": 788, "name": "ABC", "description": "abc", "layername": "abclayer", "file_type": "Parquet", "attrname": "Name", "datatype": "varchar", "length": 40 } ] let fieldDetails = []; data.forEach(element => { fieldDetails.push({ "attributeName": element['attrname'], "datatype": element['datatype'], "length": element['length'] }) }); const newdata = data.map(x => { return { "name": x.name, "description": x.description, "fieldDetails": fieldDetails, "layername": x.layername, "file_type": x.file_type } }) console.log(newdata[0])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.