js循环处理数据的问题

{
  "Statement": [
    {
      "Condition": {
        "IpAddress": {
          "SSc:SourceIp": [
            "4.4.4.4"
          ]
        }
      }
    },
    {
      "Condition": {
        "IpAddress": {
          "SSc:SourceIp": [
            "2.2.2.2"
          ]
        },
        "StringEquals": {
          "SSc:RequestHeader": [
            "1.1.1.1"
          ]
        }
      }
    }
  ]
}

请问怎么把以上数据处理成

{
  Condition: {
   {
     "nameValue": "SSc:SourceIp",
     "operateValue": "IpAddress",
     "keyValue": "4.4.4.4"
   }
  },
  Condition: {
    {
      "nameValue": "SSc:SourceIp",
      "operateValue": "IpAddress",
      "keyValue": "2.2.2.2"
    },
    {
      "nameValue": "SSc:RequestHeader",
      "operateValue": "StringEquals",
      "keyValue": "1.1.1.1"
    }
  }
}

🙏谢谢大佬们

阅读 1.1k
1 个回答

首先,不能处理成

{
    Condition: { },
    Condition: {
        { }
        { }
    }
}
  1. 一个对象里不能有两个 Condition,如果是对象字面量,只有后面这个生效
  2. 对象里不能保存对象列表(第二个 Condition 中的内容),只能用数组

所以,我猜你其实想要的是

{
    Condition: [
        { },
        { },
        { }
    ]
}    

这样的话

// 假设源数据由 origin 引用

const result = origin.Statement.flatMap(({ Condition: it }) =>
    Object.entries(it)
        .flatMap(([operateValue, v]) => Object.entries(v)
            .flatMap(([nameValue, ipList]) => ipList.map(keyValue => ({
                nameValue,
                operateValue,
                keyValue
            })))
        )
);

结果

[
  {
    nameValue: 'SSc:SourceIp',
    operateValue: 'IpAddress',
    keyValue: '4.4.4.4'
  },
  {
    nameValue: 'SSc:SourceIp',
    operateValue: 'IpAddress',
    keyValue: '2.2.2.2'
  },
  {
    nameValue: 'SSc:RequestHeader',
    operateValue: 'StringEquals',
    keyValue: '1.1.1.1'
  }
]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题