检查键是否存在于另一个对象中

卡西利亚斯

有两个对象metadatadata

我编写了以下代码来查找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.entriesfiltermap

外观如下:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查对象是否存在于另一个模型外键字段中

如何检查对象属性是否也存在于另一个对象中?

angular 5 和 firebase/angularfire,使用键检查键是否存在于另一个表中

如何使用JS检查对象是否存在于另一个对象中

如何检查嵌套对象的值是否已存在于另一个对象中?

忽略对象中存在于JavaScript另一个数组中的键

检查对象值数组是否存在于另一个数组中,但长度不同

检查值是否存在于选择查询中的另一个表中

检查键是否存在于另一个数组中并从中获取值并推送到另一个数组

如何检查值是否存在于另一个熊猫数据框中?

FirebaseRecyclerAdapter 检查 Id 是否存在于另一个表中

检查列表是否存在于另一个列表中

查找列表的对象是否存在于另一个列表中

检查一个对象中的项目是否存在于另一个对象中(使用下划线)

如何检查一个JavaScript对象中的值是否存在于另一个JavaScript对象中?

如何检查一个 json 对象数组中的 id 是否存在于另一个 json 对象嵌套数组中?

遍历一个IQueriable(对象A)并检查属性是否存在于另一个IQueriable(对象B)中

Drools 检查列表中的一个属性是否存在于另一个列表中

检查一个数组中的元素是否存在于另一个数组中

检查一个表中的值组合是否存在于另一个表中

检查一个数据框是否存在于另一个

当对象键存在于javascript中另一个对象的数组中时,重组对象数据

遍历一个目录并检查它是否存在于另一个目录中

如何检查一个元素是否存在于另一个元素在Jquery中?

如何检查一个 XML 元素是否存在于 nodejs 的另一个元素中?

访问一个类的对象以查看其是否存在于另一个类中

jQuery如何检查一组对象是否存在于另一个数组对象中

reactjs如何过滤/检查数组中的任何对象是否存在于另一个对象数组中?

使用 lodash 过滤对象数组并检查对象属性值是否存在于另一个数组中