2016-06-15 5 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 в UserID из $scope.users

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, так что для этого вы должны использовать базовый подход к итерации через 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

, так как вы используете угловой, $ is не jquery. вы можете попробовать преобразовать это для цикла – chungtinhlakho

+0

без jquery https://jsfiddle.net/48d5yz17/ – chungtinhlakho

Смежные вопросы