AngularJS,过滤器:如何将一个巨大的巨型对象(JSON)变成一个数组?

AngularJS, filters: how to turn a big giant object (JSON) into an array?

我在使用 Angular 过滤器时遇到一些问题,根据 docs 过滤器仅适用于数组,我现在有一个非常大的对象,实际上是显示一些动态内容.我会给你们留下一些我正在经历的不同例子。

1st 我想要实现的行为,you can see it here

2 假设 this is 与真正的 JSON 对象,只是从我的浏览器控制台中的网络中提取。

在第二个例子中,你验证了为什么我的搜索器不工作,实际上是因为我刚才提到的对象。

我有名为 SportsFactory 的服务具有此功能

$http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + agent)
            .success(function(sports) {
              //here I need: forcing array instead of object
              sports = _.values(sports);
              sports = _.sortBy(sports, function(sport) {
                return sport.priority;
              });
              console.log(sports)
              LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
              defer.resolve(sports);
            })
            .error(function(err) {
              defer.reject(err);
            });

如您所见,有一个 console.log 是 returning 这个:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

现在,我该怎么做才能让我的过滤器正常工作? 我该怎么做才能将 sports object 转换为数组?

基本上,函数的这一部分就是 return 我告诉你的那个对象,我需要 return 一个数组来代替

      .success(function(sports) {
          //forcing array instead of object
          sports = _.values(sports);
          sports = _.sortBy(sports, function(sport) {
            return sport.priority;
          });
          console.log(sports)
          LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
          defer.resolve(sports);
        })

这是过滤器工作的 plunkr,我只是将您制作的数组设置为 $scope.variable 并将其用于 ng-repeat。

Plunkr

我稍微修改了代码,因为我没有在 plunkr 中执行 GET 请求,但想法是一样的。

var mySports = _.values($scope.sports);
    $scope.sportsArray = _.sortBy(mySports, function(sport) {
    return sport.priority;
});
console.log($scope.sportsArray);

//and the HTML

<div ng-repeat="sport in sportsArray | filter:query"></div>

让我知道这是否有意义。