按键选择JSON数组对象

时间:2018-05-18 00:05:09

标签: javascript arrays json

我有JSON数组,看起来像

var data = {
  "fields": [{
      "firstName": {
        "fieldName": "First Name",
        "required": true,
        "provided": false
      }
    },
    {
      "lastName": {
        "fieldName": "Last Name",
        "required": true,
        "provided": false
      }
    },
    {
      "email": {
        "fieldName": "Email",
        "required": true,
        "provided": false
      }
    }
  ]
}

再往下我试图这样做:

  1. 访问firstName对象的fieldName。不使用索引就可以做到吗?
  2. data.fields给了我一个对象数组。从那时起,我似乎无法使用对象密钥进行访问。

    此外,data.fields[0]会提供整个firstName对象,但我似乎无法data.fields[0]["field"]data.fields[0].field

    感谢。

2 个答案:

答案 0 :(得分:5)

您可以使用.find查找数组中的特定元素:

var data={"fields":[{"firstName":{"fieldName":"First Name","required":!0,"provided":!1}},{"lastName":{"fieldName":"Last Name","required":!0,"provided":!1}},{"email":{"fieldName":"Email","required":!0,"provided":!1}}]}
const firstNameFieldName = data.fields
  .find(obj => 'firstName' in obj)
  .firstName.fieldName;
console.log(firstNameFieldName);

另请注意,您拥有“JSON数组”。 JSON是一个符号,用于将对象表示为 strings 。你只有一个简单的对象

如果将fields转换为对象而不是数组,您可能会觉得更容易,例如:

var data = {
  fields: {
    "firstName": {
      "fieldName": "First Name",
      "required": true,
      "provided": false
    },
    "lastName": {
      "fieldName": "Last Name",
      "required": true,
      "provided": false
    },
    "email": {
      "fieldName": "Email",
      "required": true,
      "provided": false
    }
  }
};

然后,您可以直接访问属性,例如data.fields.firstName,而无需诉诸.find

答案 1 :(得分:1)

data.fields[0]就是这个对象

{
    "firstName": {
        "fieldName": "First Name",
        "required": true,
        "provided": false
    }
}

因此,如果您想要访问firstName键对象的任何内容,则不需要使用索引,因为它是Object而不是Array。你可以像data.fields[0].firstName那样访问它,它将等于

{
    "fieldName": "First Name",
    "required": true,
    "provided": false
}

如果您想访问内部字段/属性,请执行data.fields[0].firstName.fieldName等等