JavaScript/AngularJS修改数组中的属性
JavaScript / AngularJS modify property in array
我有以下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
属性
相关文章:
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 如何使用lodash返回与模式匹配的属性数组
- 从嵌套属性数组中获取对象嵌套值
- 如何使用 javascript 返回数据属性数组
- JQuery 获取返回的属性数组
- 对公共属性数组进行排序
- Angularjs-ng repeat不反映属性数组中的更改
- JADE&NodeJS访问JSON对象属性数组
- Lodash 按数组的属性数组过滤
- 将对象数组转换为属性数组
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- 骨干移除和新视图不会重置其属性数组内容
- 使用JSON从对象数组创建属性数组
- 将数据属性数组转换为对象
- 从属性数组和匹配属性值数组创建JavaScript对象的有效方法
- 访问json中的属性数组
- jquery.获得没有重复的自定义属性数组
- 如何更新对象属性数组值
- 多属性数组语法
- jQuery:生成"name”;动态属性数组