如何在Angular JS项目的json文件中选择具有特定属性的对象?

时间:2015-03-07 21:01:10

标签: angularjs api

我有一个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>

My 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": [
    // ...
  ]
},
]

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

您需要更改数据库的结构,以使提供程序位于顶层。实现这样的功能的功能应该遍历每个电影提供,如下所示:

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;  
} 

我在这里开始了一个小提琴:http://jsfiddle.net/d29tu8fg/1/

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

将提供者添加到$scope,并在视图中显示长度:

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