JavaScript / AngularJS修改数组中的属性

时间:2014-11-12 17:19:09

标签: javascript arrays angularjs

我有以下AngularJS模型:

$scope.Model = {
     Users : [{
         UserId: '',
         FirstName: '',
         LastName: ''
     }],
     Products :[{
         ProductId: '',
         Price: ''
     }]
};

如果我使用N个用户填充此数组,并且一个用户有id=1,那么如何更新该特定用户(id=1)属性LastName

例如,如果我将获得一个新的AngularJS模型:

$scope.UserToUpdate ={
   UserId: 1,
   LastName: "Smith"
};

我想循环遍历$scope.Model数组并使用id=1更新用户,但只更新FirstName属性。

P.S。我不知道数组中目标用户对象在什么位置,所以基本上可以是$scope.Model.Users[0]$scope.Model.Users[1]$scope.Model.Users[10]$scope.Model.Users[N] ... < / p>

4 个答案:

答案 0 :(得分:3)

您可以循环浏览用户列表

for (var i = 0; i < $scope.Model.Users.length; i++) {
    if($scope.Model.Users[i].UserId === $scope.UserToUpdate.UserId) {
        $scope.Model.Users[i].LastName = $scope.UserToUpdate.LastName;
        break;
    }
}
编辑:实际上,哈希的答案也是如此。这是使用$ filter的另一种解决方案:

var matchedUsers = $filter('filter')($scope.Model.Users, { UserId: $scope.UserToUpdate.UserId });
if (matchedUsers.length > 0) {
    matchedUsers[0].LastName = $scope.UserToUpdate.LastName;
}

并且不要忘记将$ filter服务添加为第二个解决方案的控制器声明中的参数。

答案 1 :(得分:0)

$scope.UserToUpdate = 
   $scope.Model.Users.filter(function(user) { return user.FirstName == "test"; })[0];

BTW:如果用户存在,您可以添加一个检查..

答案 2 :(得分:0)

你可以使用$ filter

      var user = $filter('filter')($scope.Model.Users, 'UserId == 1');

您详细了解了$ filter('filter')here

答案 3 :(得分:0)

试试这个!工作演示http://plnkr.co/edit/scyV79HqqA7nOG9h4ezH?p=preview。请检查控制台日志。

angular.forEach($scope.Model[0].Users, function(value1, key1) {
    var i = 0;
    angular.forEach(value1, function(value, key) {
      if (key == 'UserId' && $scope.UserToUpdate.UserId == value) {
        $scope.Model[0].Users[i].LastName = $scope.UserToUpdate.LastName;
      }
      i++;
    });

  });

以上代码根据Model对象(id = 1)更新LastName对象UserToUpdate属性