对迭代嵌套对象感到困惑

Confused about iterating nested objects

本文关键字:对象 迭代 嵌套      更新时间:2023-09-26

所以我有以下对象:

{ 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。。。

那么这里发生了什么?

您正在从will return密钥->用户名hence you need to access that key from object and then消息from that用户名`object中的object which is another对象.错误in访问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

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

尝试迭代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)