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