【问题标题】:alternate element in json array angularjsjson数组angularjs中的备用元素
【发布时间】:2016-08-18 12:51:38
【问题描述】:

我在我的数组中推送两次不同的数据:

$scope.numtickets.push({nbuser:data.users[i].name});

所以我通过这样做在我的视图中检索数据:

<ul ng-repeat="user in numtickets track by $index">
        <li>{{user.nbuser}}</li>
        <li>{{user.nbticket}}</li>
</ul>

后面几行:

$scope.numtickets.push({nbticket:data.tickets.length});

这显示给我这个:

我想要的是交替姓名和我的号码。 所以我应该有: 克莱尔帕格涅兹 1 米歇尔·波尔纳里夫 1 玛蒂尔德齐默 3

这是我的数组在控制台中显示的内容:

如果你看到我的所有代码,你可以看到我没有选择先推送所有姓名,然后推送我的所有票号。所以我需要按备用名称和票对元素进行排序。 所以这是我的控制器中的所有代码:

$scope.displayuser = function(id) {
  var token = "xxxxxxxx";
  userdisplay
    .send(token, id)
    .then(function(data) {
      console.log(data);
      $scope.userbyorga = data.users;
      $scope.numtickets = [];

      for (i = 0; i < data.users.length; i++) {
        var userid = data.users;
        $scope.numtickets.push({
          nbuser: data.users[i].name
        });
        var userarray = JSON.stringify(userid);
        localStorage.setItem("myid", userarray);
      }
    })
    .then(function() {
      var tabuser = JSON.parse(localStorage.getItem("myid"));
      var urls = [];

      for (i = 0; i < tabuser.length; i++) {
        urls.push({
          url: JSON.stringify("https://cubber.zendesk.com/api/v2/users/" + tabuser[i].id + "/tickets/requested.json")
        });

        displayfilter
          .user(token, tabuser[i].id)
          .then(function(data) {
            $scope.numtickets.push({
              nbticket: data.tickets.length
            });
          });
      }
    });
}

【问题讨论】:

  • 您有充分的理由不简单地在数组中推送具有这两个属性的项目吗?
  • 是的,这与我发送给 API 以检索数据的请求不同
  • 难道你不能等待最后一个请求成功后再将完成的对象插入数组吗?
  • 如果你告诉我怎么做,我可以这样做,因为我如何才能在我最后一次请求结束时访问我的值data.users[i].name

标签: arrays angularjs json sorting


【解决方案1】:

使用用户 ID 嵌套数据。在第一次请求为每个用户创建对象

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

            var userid = data.users;
            $scope.numtickets[userid] = {nbuser:data.users[i].name}
            var userarray = JSON.stringify(userid);
            localStorage.setItem("myid",userarray);
        }

在第二次请求时按用户 ID 推送 nbticket

       for(i = 0; i < tabuser.length; i++){
            urls.push({
                url:JSON.stringify("https://cubber.zendesk.com/api/v2/users/"+tabuser[i].id+"/tickets/requested.json")
            });
            console.log(urls);
            displayfilter
                .user(token,tabuser[i].id)
                .then(function(data){
                    $scope.numtickets[tabuser[i].id]['nbticket'] = data.tickets.length
                    console.log($scope.numtickets);

                })
        }

你会得到像这样的对象

  {
     1: {
        'nbuser': 'User name1',
        'nbticket': '1',
      },
     2: {
        'nbuser': 'User name2',
        'nbticket': '2',
     }
     3: {
       'nbuser': 'User name3',
       'nbticket': '2',
      }
}

【讨论】:

  • 你帮了我很多忙!只有一件事,在这一行$scope.numtickets[tabuser[i].id]['nbticket'] = data.tickets.length,它说“TypeError:无法读取未定义的属性'id'”,它无法识别我的数组,我无法管理你为什么能帮助我?
【解决方案2】:

仅当 nbuser 的数量等于 nbtickets 并且它们的顺序相同时,请在推送 nbtickets 时尝试这样做:

$scope.numtickets.push({nbuser:data.users[i].name});

然后在第二个请求中这样做

for(var i = 0; i < $scope.numtickets.length; i++){ $scope.numtickets[i].nbticket = data[i].tickets.length; }

然后对于 HTML,您可以遍历 $scope.numtickets

<li ng-repeat="item in numtickets track by $index" ng-click="displayuser(item.id)"> {{item.nbuser}} <br><br> {{item.name}} <br><br> </li>

干杯

【讨论】:

    【解决方案3】:
    cols=_.groupBy(usertab, function(item){ return if(item.nbuser); });
    usertab = cols[0];
    usernum = cols[1];
    
    <li ng-repeat="item in usertab track by $index" ng-click="displayuser(item.id)">{{item.name}}  {{usernum[$index].name}}</li>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-28
      • 2013-02-19
      • 2016-08-13
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多