如何动态地从Javascript中的对象获取值?

时间:2019-12-19 07:47:00

标签: javascript arrays json angularjs

所以说我有一个对象数组,对象内部有对象。此数据是动态的,即密钥不会相同,可能会有所不同。 例如:

[
{
    "uuid": "53e7202c-28c8-4083-b910-a92c946a7626",
    "extraIdentifiers": {
      "National ID": "NAT2804"
    },
    "givenName": "Krishnan",
    "customAttribute": null,
    "age": "32"
},
{
    "uuid": "9717ec58-8f87-4305-a57b-bed54301def7",
    "extraIdentifiers": {
      "National ID": "NAT2805"
    },
    "givenName": "Dale",
    "customAttribute": null,
    "age": "32"
},
{
    "uuid": "d3563522-927d-4ff0-b697-eb164289a77d",
    "extraIdentifiers": {
      "National ID": "NAT2806"
    },
    "givenName": "David",
    "age": "32"
}
]

现在我有一个可以从其中一个键获取值的函数。例如,我想获取givenName,因此它将返回David

这是它的代码:

$scope.sortPatient = function (param) {
    $scope.results.map(function (currentObj) {
        console.log(currentObj[param]);
    })
};

$scope.results将保存上述JSON对象。调用sortPatient时,我可以通过传递我想要其值的key来调用它。例如:sortPatient('givenName')sortPatient('age')

这将在控制台中记录Dale32。但是,如果我调用sortPatient('extraIdentifiers.National ID'),则它不会在控制台中记录NAT2804,而是记录未定义的日志。我也尝试过像sortPatient('extraIdentifiers[National ID]')这样称呼它,但仍然显示未定义。

如何获取键中的键值?我也无法更改函数的调用方式。我只能更改其定义。但是我无法获取复杂对象中的键值。

1 个答案:

答案 0 :(得分:1)

相反,我会将带有键的数组传递给您的方法,然后检查对象是否包含给定的键路径。

$scope.sortPatient = function (params) {
  $scope.results.map(function (currentObj) {
     var res = currentObj;
     params.forEach(function(param){
        if(res[param]) res = res[param];
     })
     console.log("res",res);
  })
};

$scope.sortPatient(['extraIdentifiers','National ID']);