我将此地图作为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
}
}
答案 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'
}
也许您可以更改序列化?