select objects 如何在 Angular JS 项目中的 json 文件中具有特定属性?

How to select objects that have a certain atribute in a json file in an Angular JS project?

我有一个 link 到一个 API,它列出了电影,每部电影都有标题、ID 等...

API: http://private-5d90c-kevinhiller.apiary-mock.com/angular_challenge/horror_movies

它还有一个 offers 数组,里面包含一个 'provider_id' 属性.

我需要显示哪个供应商有多少部电影。

但我不知道怎么做,我想到的最好的是:

 {{movie.offers[0].provider_id}}

但那只会显示每部电影的第一个提供者。

我想要的是提取每个提供商有多少部电影。

我的Html:

<div ng-controller="ProviderController as provider">      
    <div  ng-repeat="movie in provider.movies">
        {{movie.offers[0].provider_id}}
    </div>
</div>

我的Main.js:

app.controller('ProviderController', function($http) {
  var provider = this;
  provider.movies = [];

  $http({
    url: 'some/path/horror_movies',
    method: "GET",
  }).success(function(data) {
    provider.movies = data;
  });
});

这也是 json 文件的结构:

[{
  "id": 140524,
  "title": "Dracula Untold",
  "offers": [{
    "provider_id": 2,
    "retail_price": 14.99,
    //...
  }, {
    "provider_id": 2,
    "retail_price": 14.99,
  }, {
    "provider_id": 7,
    "retail_price": 14.99,
  }, ]
}, 
{
  "id": 138993,
  "title": "The Purge: Anarchy",
  "offers": [
    // ...
  ]
},
]

有什么想法吗?谢谢。

您将需要更改数据库的结构以使提供程序处于顶层。实现类似功能的函数应该遍历每部电影提供的内容,如下所示:

function getProviders (movies) {
  var providers = [],
    movie = {},
    offer = {};

  for (var i = 0, max = movies.length; i < max; i += 1) {
    movie = movies[i];
    for (var j = 0; j < movies[i].offers.length; j += 1) {
        offer = movie.offers[j];

        if (typeof providers[offer.provider_id] === 'undefined') {
            providers[offer.provider_id] = { movies: [] };
        }
        providers[offer.provider_id].movies.push(movie);
    }
  }

  return providers;  
} 

我在这里开始fiddle:http://jsfiddle.net/d29tu8fg/1/

在将电影添加到提供商之前,您可能还想检查该电影是否已经存在。不过,您只需要这样做,如果 - 就像在您的数据中一样 - 一部电影可以有来自同一提供商的两种不同优惠。

将提供商添加到 $scope 并在您的视图中显示长度:

<div ng-repeat="provider in providers track by $index">
    {{provider.movies.length}}
</div>