【问题标题】:How to modify json object in array of object如何修改对象数组中的json对象
【发布时间】:2016-10-16 00:18:45
【问题描述】:

我有一个对象数组

// 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"}]

如果在$scope.usersSelected 中找到$scope.usersSelected 属性,我想更新它们。所以我迭代$scope.usersSelected然后在$scope.usersUserID中搜索它的UserID

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 从数据库中获取数据。

【问题讨论】:

  • 如果你想删除 $hashkey 并像这样其他人做 angular.toJson() 它会删除 man
  • @SakthiSureshAnand,太好了,感谢您提供的信息,所以以角度打印 json,是否应该使用 angular.toJson() 而不是 JSON.stringify()
  • 我建议你去underscore.js underscorejs.org/[][1] 它有所有的迭代方法

标签: javascript arrays angularjs json asp.net-web-api


【解决方案1】:

经过测试,工作正常

 $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);

【讨论】:

  • 谢谢,它可以工作,但不是迭代usersSelected,我们可以使用indexOf 来获取对象吗?在使用$.grep 之前,我使用了array.indexOf(),但它不起作用。
  • 因为您正在遍历 json 数组,它基本上是对象,因此您将获得数组的索引,但您需要遍历 json 中作为 ke 值类型存在的用户 ID,以便您必须使用基本的方法来遍历json
【解决方案2】:

用 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]);
  }


}

【讨论】:

  • 因为您使用的是角度,所以 $ 不是 jquery。你能试着把它转换成for循环吗
  • 是的,但它仍然不起作用,这是代码var users2 = $scope.users; var usersSelected2 = $scope.usersSelected; console.log('users2 = ' + JSON.stringify(users2)); $(users2).each(function (i, d) { if (usersSelected2.some(function (e) { e.UserID == d.UserID })) { d.Selected = true; } }); console.log('users2 = ' + JSON.stringify(users2));
  • 编辑了答案,你能运行那个确切的代码看看。
  • 我已经调试过了,条件永远不成立
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2013-05-17
  • 2021-05-03
  • 2017-08-19
  • 1970-01-01
相关资源
最近更新 更多