【问题标题】:How to loop through a complex object in JS如何在JS中循环一个复杂的对象
【发布时间】:2020-07-22 06:15:46
【问题描述】:

这是我的 obj,我只想循环显示错误:

var obj = {
    "error": {
        "errors": {
            "username": {
                "properties": {
                    "message": "username field is empty.",
                    "type": "required",
                    "path": "username"
                },
                "kind": "required",
                "path": "username"
            },
            "email": {
                "properties": {
                    "message": "email field is empty.",
                    "type": "required",
                    "path": "email"
                },
                "kind": "required",
                "path": "email"
            },
            "password": {
                "properties": {
                    "message": "password field is empty.",
                    "type": "required",
                    "path": "password"
                },
                "kind": "required",
                "path": "password"
            }
        },
        "_message": "User validation failed",
        "message": "User validation failed: username: username field is empty., email: email field is empty., password: password field is empty."
    }
}

我想显示错误:properties.message 但我很难过,这是我迄今为止尝试过的:

for (var key in obj.error.errors) {
    for (var key2 in key.properties){
        for (var key3 in key2.message){
            console.log(key3)
        } 
    } 
}

但是控制台是空白的。

【问题讨论】:

  • 第二个和第三个 for 循环看起来有问题 :)

标签: javascript loops for-loop object


【解决方案1】:

在循环中,您获取的是密钥,而不是对象本身。此外,如果您的数据是这样的结构,您也不需要添加所有这些循环。只需挑选错误,遍历所有错误。

for(var d in obj.error.errors){
    console.log(a[d].properties.message)
}

【讨论】:

    【解决方案2】:

    一个可行的解决方案

    Object.values(obj.error.errors).forEach((error) => { console.log(error.properties.message) })
    

    查看您的数据结构,您只需要迭代“错误”列表

    【讨论】:

      【解决方案3】:

      检查一下,它将以properties:message 格式返回给您

      const obj = {
          "error": {
              "errors": {
                  "username": {
                      "properties": {
                          "message": "username field is empty.",
                          "type": "required",
                          "path": "username"
                      },
                      "kind": "required",
                      "path": "username"
                  },
                  "email": {
                      "properties": {
                          "message": "email field is empty.",
                          "type": "required",
                          "path": "email"
                      },
                      "kind": "required",
                      "path": "email"
                  },
                  "password": {
                      "properties": {
                          "message": "password field is empty.",
                          "type": "required",
                          "path": "password"
                      },
                      "kind": "required",
                      "path": "password"
                  }
              },
              "_message": "User validation failed",
              "message": "User validation failed: username: username field is empty., email: email field is empty., password: password field is empty."
          }
      };
      
      const objVal = Object.values(obj.error.errors);
      
      const errors = objVal.reduce((obj, item) => {
        return (obj[item.path] = item.properties.message, obj)
      },{})
      
      console.log(errors);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2021-07-14
        • 2011-12-04
        • 1970-01-01
        • 2014-07-28
        • 2015-06-14
        • 2015-07-03
        相关资源
        最近更新 更多