2016-06-15 136 views
0

的数组我有对象的数组如何修改JSON对象的对象

// This is should be taken from database 
$scope.users = [{"$id":"1","UserID":3,"Name":"A","Selected":false},{"$id":"2","UserID":4,"Name":"B","Selected":false},{"$id":"3","UserID":5,"Name":"C","Selected":false},{"$id":"4","UserID":6,"Name":"D","Selected":false}] 

然后有一个包含从先前的屏幕

$scope.usersSelected = [{"$id":"3","UserID":5,"Name":"C","Selected":true,"$$hashKey":"object:83"},{"$id":"4","UserID":6,"Name":"D","Selected":true,"$$hashKey":"object:84"}] 

选定的用户我想更新的数组Selected$scope.users的属性,如果它们在$scope.usersSelected中找到。所以我遍历$scope.usersSelected然后搜索其UserID$scope.usersUserID

for (var i = 0; i < $scope.usersSelected.length; i++) { 
    var obj = $.grep($scope.users, function (e) { return e.UserID == $scope.usersSelected[i].UserID; }); 
    obj.Selected = true; 
} 

Selected属性将不会被更新。上面的代码有什么问题?第二,我需要一个关于上面数组中的数据的解释,为什么当我从数据库填充数据时总是有"$id",而且当我从另一个屏幕获取数据时,还需要"$$hashKey"?这些价值从何而来?

笔记:我正在使用AngularJS和ASP.NET Web API 2从数据库中获取数据。

+0

如果要删除'$ hashkey'和这样做的其他'angular.toJson()'它会删除男人 – SakthiSureshAnand

+0

@SakthiSureshAnand,太好了,谢谢信息,所以角度打印JSON,应该使用'angular.toJson()'而不是'JSON.stringify()'? – Willy

+0

我建议你去'underscore.js' http://underscorejs.org/[][1]它有所有的方法来迭代像东西 – SakthiSureshAnand

回答

3

测试工作绝对没问题

$scope.users = [ { 
     "$id" : "1", 
     "UserID" : 3, 
     "Name" : "A", 
     "Selected" : false 
    }, { 
     "$id" : "2", 
     "UserID" : 4, 
     "Name" : "B", 
     "Selected" : false 
    }, { 
     "$id" : "3", 
     "UserID" : 5, 
     "Name" : "C", 
     "Selected" : false 
    }, { 
     "$id" : "4", 
     "UserID" : 6, 
     "Name" : "D", 
     "Selected" : false 
    } ]; 

    $scope.usersSelected = [ { 
     "$id" : "3", 
     "UserID" : 5, 
     "Name" : "C", 
     "Selected" : true, 
     "$$hashKey" : "object:83" 
    }, { 
     "$id" : "4", 
     "UserID" : 6, 
     "Name" : "D", 
     "Selected" : true, 
     "$$hashKey" : "object:84" 
    } ] 
    var users = $scope.users; 
    var usersSelected = $scope.usersSelected; 
    for (var i = 0; i < users.length; i++) { 
     for (var j = 0; j < usersSelected.length; j++) { 
      debugger 
      if (users[i].UserID == usersSelected[j].UserID) { 
       console.log(users[i].UserID) 
       console.log(usersSelected[j].UserID) 
       users[i].Selected = true; 

      } 
     } 

    } 

    console.log(users) 
    console.log(usersSelected); 
+0

谢谢,它的工作原理,但不是迭代'usersSelected',我们可以使用'indexOf'获取对象吗?在使用'$ .grep'之前,我使用了'array.indexOf()',但它不起作用。 – Willy

+1

,因为你迭代了基本上是对象的json数组,所以你将得到数组的索引,但是你需要遍历在json中作为ke值类型存在的userid,所以你必须使用基本的方法来遍历JSON – Deepanjan

1

用javascript测试。

usersSelected = $scope.usersSelected; 

users = $scope.users; 

for (var i=0;i<users.length;i++){ 

    if (usersSelected.some(function(e) e.UserID == users[i].UserID)) { 
    users[i].Selected = true; 
    console.dir(users[i]); 
    } 


} 
+0

仍然不工作 – Willy

+0

因为你使用的角度,$是不是jQuery。你可以尝试转换为循环 – chungtinhlakho

+0

没有jquery https://jsfiddle.net/48d5yz17/ – chungtinhlakho