从给定键的Map中提取值

时间:2015-10-15 15:26:10

标签: angularjs

我将此地图作为JSON

返回
"notificationData":[{"key":"origin","value":"ABC"},{"key":"destn","value":"XYZ"},{"key":"flt","value":"450"},{"key":"date","value":"10/14/2015"}]

目前我有角度的逻辑来获取每个密钥的值 - 是否有更好的方法来直接访问每个密钥?

for(var notifydata = 0; notifydata < notificationMockdata[notify].notificationData.length; notifydata++)
{
                if(notificationMockdata[notify].notificationData[notifydata].key == 'origin')
                {
                                $scope.notificationContent[notify].notificationData.origin = notificationMockdata[notify].notificationData[notifydata].value
                }
                else if(notificationMockdata[notify].notificationData[notifydata].key == 'destn')
                {
                                $scope.notificationContent[notify].notificationData.destination = notificationMockdata[notify].notificationData[notifydata].value
                }
}

2 个答案:

答案 0 :(得分:2)

如果您只想映射特定键:

您的代码的主要问题是,即使搜索到的对象是第一个,您也会浏览整个notificationData数组。

在ES6中,您将能够使用Array.prototype.find()来获取所需的特定对象。目前,您的for循环可能是最佳方式,但是当您拥有所有密钥时,您应该停止迭代,方法是为您的for添加条件或使用break

for(
    var notifydata = 0;
    notifydata < notificationMockdata[notify].notificationData.length && (angular.isUndefined($scope.notificationContent[notify].notificationData.origin) || angular.isUndefined($scope.notificationContent[notify].notificationData.destination));
    notifydata++
) {
    if(notificationMockdata[notify].notificationData[notifydata].key == 'origin')
        $scope.notificationContent[notify].notificationData.origin = notificationMockdata[notify].notificationData[notifydata].value
    else if(notificationMockdata[notify].notificationData[notifydata].key == 'destn')
        $scope.notificationContent[notify].notificationData.destination = notificationMockdata[notify].notificationData[notifydata].value
}

for(var notifydata = 0; notifydata < notificationMockdata[notify].notificationData.length; notifydata++) {
    if(notificationMockdata[notify].notificationData[notifydata].key == 'origin')
        $scope.notificationContent[notify].notificationData.origin = notificationMockdata[notify].notificationData[notifydata].value
    else if(notificationMockdata[notify].notificationData[notifydata].key == 'destn')
        $scope.notificationContent[notify].notificationData.destination = notificationMockdata[notify].notificationData[notifydata].value
    if (angular.isDefined($scope.notificationContent[notify].notificationData.origin) && angular.isDefined($scope.notificationContent[notify].notificationData.destination))
        break;
}

如果要映射所有键:

你应该使用Array.protoype.map()或Array.prototype.forEach()来获得更干净的代码:

$scope.notificationContent[notify].notificationData = {}
notificationMockdata[notify].notificationData.forEach(function(data) {
  $scope.notificationContent[notify].notificationData[data.key] = data.value;
});

答案 1 :(得分:0)

我认为无法直接访问,因为您的地图设计需要查看数组的每个对象。也可以有多个条目。 json中的法线贴图是一个对象,如下所示:

{
   'key1':'value1',
   'key2':'value2',
   'key3':'value3'
}

也许您可以更改序列化?