【问题标题】:Compare two nested objects by its keys and get the matched object/array [closed]通过键比较两个嵌套对象并获取匹配的对象/数组[关闭]
【发布时间】:2020-03-10 08:23:13
【问题描述】:

我有 2 个对象 a 和 diff 我需要嵌套对象“a”中的匹配数组或对象。

输入如下:

 var a = {
"AMI_DESCRIPTION":{
    "tags":{
        "aws":1,
        "vendor_param":1
    }
},
"AMI_ID":{
    "description":"The AWS AMI id for the version of Ontap for the VSA to boot up with",
    "tags":{
        "aws":1,
        "vendor_param":1
    }
},
"AMI_TYPE":{
    "allow":[
        "byol",
        "paygo10",
        "paygo2",
        "paygo"
    ],
    "default":"byol",
    "description":"Defined the type of Cloud Ontap AMI to be deployed",
    "tags":{
        "aws":1,
        "vendor_param":1
    }
},
"AWSCLI_PATH":{
    "default":"/usr/software/bin/aws",
    "description":"Path to AWS CLI binaries",
    "tags":{
        "aws":1,
        "dev_only":1,
        "vendor_param":1
    }
},
"AWS_DISABLE_ROLLBACK":{
    "allow":[
        "true",
        "false"
    ],
    "default":"false",
    "description":"",
    "tags":{
        "aws":1,
        "dev_only":1,
        "unsupported":1,
        "vendor_param":1
    }
},
"IMAGE_BUILDNAME":{
        "allow":[
            "cst-ok",
            "cit-ok",
            "none",
            "ignore_filter"
        ],
        "default":"cit-ok",
        "description":"filter",
        "tags":{
            "aws":1,
            "gcp":1,
            "vendor_param":1
        }
},
"IMAGE_DEBUG_TYPE":{
        "description":"tedst",
        "tags":{
            "common":1,
            "vendor_param":1
        }
},

映射a 对象并返回diff 对象中存在的字段的值

 var diff = {
    "IMAGE_BUILDNAME":"testing",
    "IMAGE_DEBUG_TYPE":"no"

}

预期输出:

  "IMAGE_BUILDNAME":{ "description":"sdsd.", "tags":{ "aws":1, "gcp":1, 
  "vendor_param":1 } }, "IMAGE_DEBUG_TYPE":{ "allow":[ "debug", "non-debug", 
  "ignore_filter" ], "default":"non-debug", "description":"filter.", "tags":{                
   "aws":1, "gcp":1, "vendor_param":1 } }

提前致谢

【问题讨论】:

  • 请提供更多详情
  • 我已经编辑了输出,因此您可以阅读它 - 请提供从输入到输出的逻辑
  • 然后你去撤消这一切 - 干得好
  • @JaromandaX 抱歉撤消了它。我没有检查过
  • 例如,为什么是"description": "sdsd." - 这是从哪里来的?输出中的"allow": ["debug", "non-debug", "ignore_filter"] 怎么样?为什么debug 在该数组中?同样对于输出中的其他属性,没有逻辑

标签: javascript vue.js vuejs2 lodash


【解决方案1】:

循环遍历diff 属性并将diff 的每个属性添加到output 作为字段及其来自a 对象的值:

 var output = {};

    for (let p in diff) {
        output[p]=a[p]
    }

完整示例

var a = {
    "AMI_DESCRIPTION": {
      "tags": {
        "aws": 1,
        "vendor_param": 1
      }
    },
    "AMI_ID": {
      "description": "The AWS AMI id for the version of Ontap for the VSA to boot up with",
      "tags": {
        "aws": 1,
        "vendor_param": 1
      }
    },
    "AMI_TYPE": {
      "allow": [
        "byol",
        "paygo10",
        "paygo2",
        "paygo"
      ],
      "default": "byol",
      "description": "Defined the type of Cloud Ontap AMI to be deployed",
      "tags": {
        "aws": 1,
        "vendor_param": 1
      }
    },
    "AWSCLI_PATH": {
      "default": "/usr/software/bin/aws",
      "description": "Path to AWS CLI binaries",
      "tags": {
        "aws": 1,
        "dev_only": 1,
        "vendor_param": 1
      }
    },
    "AWS_DISABLE_ROLLBACK": {
      "allow": [
        "true",
        "false"
      ],
      "default": "false",
      "description": "",
      "tags": {
        "aws": 1,
        "dev_only": 1,
        "unsupported": 1,
        "vendor_param": 1
      }
    },
    "IMAGE_BUILDNAME": {
      "allow": [
        "cst-ok",
        "cit-ok",
        "none",
        "ignore_filter"
      ],
      "default": "cit-ok",
      "description": "filter",
      "tags": {
        "aws": 1,
        "gcp": 1,
        "vendor_param": 1
      }
    },
    "IMAGE_DEBUG_TYPE": {
      "description": "tedst",
      "tags": {
        "common": 1,
        "vendor_param": 1
      }
    }
    }

    var diff = {
      "IMAGE_BUILDNAME": "testing",
      "IMAGE_DEBUG_TYPE": "no"
    }


    var output = {};

    for (let p in diff) {
        output[p]=a[p]
    }
    
    console.log(output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多