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

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

本文关键字:一个 对象 JSON 数组 巨大 AngularJS 过滤器      更新时间:2023-09-26

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

首先,我想要实现的行为,你可以在这里看到它。

第二,假设这是针对刚刚从浏览器控制台中的网络中提取的真实 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返回以下内容:

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

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

基本上,函数的这一部分是返回我告诉您的对象,这是我需要返回数组

的对象
      .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.变量并将其用于 ng-repeat。

普伦克

我稍微更改了代码,因为我没有在 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>

让我知道这是否有意义。