JavaScript/AngularJS修改数组中的属性

JavaScript / AngularJS modify property in array

本文关键字:属性 数组 修改 AngularJS JavaScript      更新时间:2023-09-26

我有以下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属性。

附言:我不知道目标用户对象在数组中的哪个位置,所以基本上可以在$scope.Model.Users[0]$scope.Model.Users[1]$scope.Model.Users[10]$scope.Model.Users[N]。。。

您可以循环浏览用户列表

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服务作为参数。

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

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

您可以使用$filter

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

您可以在这里阅读更多关于$filter('filter')的信息

试试这个!工作演示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++;
    });
  });

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