【问题标题】:Confused about iterating nested objects [duplicate]对迭代嵌套对象感到困惑[重复]
【发布时间】:2016-04-08 20:13:04
【问题描述】:

所以我有以下对象:

{ err:
  { message: 'Validation failed',
    name: 'ValidationError',
    errors: 
     { username: 
        { properties: [Object],
          message: 'Path `username` is required.',
          name: 'ValidatorError',
          kind: 'required',
          path: 'username',
          value: '' } } } }

我正在尝试迭代 err.errors 并将例如 err.errors.username.message 推入一个数组:

for(var error in err.errors){
  messages.push(error.message);
}

这样做只是将 null 推入我的 messages 数组。因此,为了解决问题,我尝试了console.log(typeof error);,这给了我一个string。这是令人困惑的地方,因为当我在err.errors.username 上调用typeof 时,它会输出object,但在循环内部调用它会产生string...

那么这里发生了什么?

【问题讨论】:

  • messages.push(err.errors[error].message);

标签: javascript


【解决方案1】:

尝试迭代obj.err.errors.username

var messages = [];
var obj = {
  err: {
    message: 'Validation failed',
    name: 'ValidationError',
    errors: {
      username: {
        properties: [Object],
        message: 'Path `username` is required.',
        name: 'ValidatorError',
        kind: 'required',
        path: 'username',
        value: ''
      }
    }
  }
}

for (var error in obj.err.errors.username) {
  if (error === "message")
    messages.push(obj.err.errors.username[error])
}

console.log(messages)

【讨论】:

    【解决方案2】:

    这里的问题for in 会给你密钥而不是数据试试for oferr.errors[error]

    【讨论】:

      【解决方案3】:

      您正在从object which is anotherobject.errorinfor-inwill returnkey->usernamehence you need to access that key from object and thenmessagefrom thatusername`对象访问key

      试试这个:

      var obj = {
        err: {
          message: 'Validation failed',
          name: 'ValidationError',
          errors: {
            username: {
              properties: [Object],
              message: 'Path `username` is required.',
              name: 'ValidatorError',
              kind: 'required',
              path: 'username',
              value: ''
            },
            password: {
            properties: [Object],
            message: 'Path `password` is required.',
            name: 'ValidatorError',
            kind: 'required',
            path: 'password',
            value: ''
            }
          }
        }
      };
      var messages = [];
      for (var error in obj.err.errors) {
        messages.push(obj.err.errors[error].message);
      }
      alert(messages);

      Fiddle here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-28
        • 2018-03-05
        相关资源
        最近更新 更多