2016-06-07 28 views
1

如何通过循环数组向数组中的对象添加属性?将属性添加到数组对象 - AngularJS

示例我有一个包含对象的数组; $scope.addresses包含许多地址。

而且可以说每个对象只有4个属性;

$scope.addresses[0].address_line1 
$scope.addresses[0].address_line2 
$scope.addresses[0].address_line3 
$scope.addresses[0].city 

现在我想为阵列中的每个对象添加更多属性。

$scope.addresses[0].location 
$scope.addresses[0].neighbourhood 

任何帮助表示赞赏。

+0

'Array.prototype.map()'的完美用例' – Redu

+0

属性值的来源是什么? – charlietfl

+0

我只是想手动添加一个属性,并将其设置为“true”或“false” –

回答

1

使用.map循环集合:

$scope.addresses = $scope.addresses.map(function(address) { 
     address.location = "X"; 
     return address; 
}); 
+2

您正在修改地址,不妨使用'forEach'并放弃返回... –

+0

或者更简单地'addresses.map(address => Object .assign({location:'X'},address))' –

+0

更改后它仍然看起来很愚蠢,你返回一个包含相同引用的新数组,因为你正在修改项目,所以这两个数组都会受到影响。仍然应该使用'forEach',否则你应该返回映射函数中的修改对象。对不起,但我真的不喜欢错误地使用Array#map“使用map来循环集合”是一个非常糟糕的建议,“使用map来创建一个带有修改项的新数组”更加符合map的语义 –

3

只是分配一个新的属性

$scope.addresses[0].location = 'Roxbury' 

$scope.addresses[0].location必须已经是一个对象,因为你在它设置属性。

要遍历所有的地址,使用的forEach或标准循环:

$scope.addresses.forEach(function(address, index) { 
    address.location = locations[index]; 
}); 

for(var i=0; i < $scope.addresses.length; i++) { 
    $scope.addresses[i].location = myLocations[i]; 
} 

或者你也可以更换整个地址对象使用地图

scope.addresses = addresses.map(address => Object.assign(
    {location: 'X'}, address)); 
+0

是的,我可以指定一个属性,像你提到的。但那只是一个目的。想象一下,我在$ scope.addresses中有100个地址,我该怎么做?我不能通过手动添加'[0],[1]'等等...所以我需要循环并添加到所有 –

+0

@ shady87这是正确的,你不知道如何循环地址? –

+0

不是'angular'我是'PHP'开发人员 –

0

简单地使用。点的概念应该做的。

$scope.addresses[0].location = 'Iceland'; 

只是检查的$存在scope.addresses [0]你做作业之前虽然否则你会得到尝试访问“未定义”错误的性质。

所以像

if($scope.addresses[0]) 
    $scope.addresses[0].location = 'Iceland'; 
0

您可以使用forEach循环,然后添加所需的项目里面:

angular.forEach($scope.addresses, function(v, k) { 
    v.location = "New location " + (k + 1); 
    v.neighbourhood = "New neighbourhood " + (k + 1); 
    }); 

观看演示视频here