有两个对象metadata
和data
。
我编写了以下代码来查找metadata
对象中是否存在对象键data
。
我想知道以下方法是否简捷。
这里是 data
"data": {
"TripResults": {
"Depth": [
577,
694,
810
],
"Speed": [
150,
150,
150
],
"Frequency": [
3,
3,
3
]
},
// the following two lines are added
"Trincot": true,
"Belgium": 2019,
"SurveyResults": {
"Depth": [
577,
694,
810
],
"Speed": [
150,
150,
150
],
"Frequency": [
3,
3,
3
]
},
"LastCalling": {
"Last_Calling_Duration": 5699,
"Last_Calling_Date": 20180619
}
}
这里是 metadata
"metaData": {
"Depth": {
"FieldName": "Depth"
},
"Time": {
"FieldName": "Time"
},
"Frequency": {
"FieldName": "Frequency"
},
"Speed": {
"FieldName": "Speed"
},
"Last_Calling_Date": {
"FieldName": "Last_Calling_Date"
},
"Last_Calling_Duration": {
"FieldName": "Last_Calling_Duration"
}
}
这是我的幼稚方法:
var unitjson = {}
var tempArray = []
for (var key in metadata) {
properties = []
eachObject = []
for (var datakey in data) {
if (data[datakey] != null && data[datakey].hasOwnProperty(key)) {
console.log("key exists");
properties.push({ "propertyName": key, "values": data[datakey][key] })
eachObject.push({ "name" : datakey, "properties": properties })
}
}
tempArray.push(JSON.parse(JSON.stringify(eachObject)))
unitjson["entities"] = JSON.parse(JSON.stringify(tempArray))
}
预期输出类似于以下内容:
{
"entities": [
{
"name": "TripResults",
"properties": [
{
"propertyName": "Depth",
"values": [
577,
694,
810
]
},
{
"propertyName": "Speed",
"values": [
150,
150,
150
]
}
]
},
{
"name": "SurveyResults",
"properties": [
{
"propertyName": "Depth",
"values": [
577,
694,
810
]
},
{
"propertyName": "Speed",
"values": [
150,
150,
150
]
}
]
},
{
"name": "LastCalling",
"properties": [
{
"propertyName": "Last_Calling_Date",
"values": [
20180619
]
},
{
"propertyName": "Last_Calling_Duration",
"values": [
5699
]
}
]
}
]
}
我首先要迭代data
而不是metaData
,因为后者实际上只是一个集合,...没有必要对其进行迭代。
然后检查每个嵌套对象data
的属性是否匹配元数据属性,如果是,则为其创建一个条目。
我会建议一个功能严重依赖的方式Object.entries
,filter
和map
。
外观如下:
const data = {"TripResults": {"Depth": [577,694,810],"Speed": [150,150,150],"Frequency": [3,3,3]},"SurveyResults": {"Depth": [577,694,810],"Speed": [150,150,150],"Frequency": [3,3,3]},"LastCalling": {"Last_Calling_Duration": 5699,"Last_Calling_Date": 20180619}}
const metaData = {"Depth": { "FieldName": "Depth" },"Time": { "FieldName": "Time" },"Frequency": {"FieldName": "Frequency" },"Speed": { "FieldName": "Speed" },"Last_Calling_Date": { "FieldName": "Last_Calling_Date" },"Last_Calling_Duration": { "FieldName": "Last_Calling_Duration" }};
const entities = Object.entries(data).map(([name, properties]) => ({
name,
properties: Object.entries(properties)
.filter(([propertyName]) => propertyName in metaData)
.map(([propertyName, value]) => ({
propertyName,
values: [].concat(value)
}))
}));
console.log(entities);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句