这是我的数据
$scope.Reports = [
{ Id: 1, Name: 'Report One', Year: 2016, Month: 5 },
{ Id: 2, Name: 'Report Core', Year: 2016, Month: 5 },
{ Id: 3, Name: 'Report Alpha', Year: 2016, Month: 3 },
{ Id: 4, Name: 'Report Moon', Year: 2015, Month: 5 },
{ Id: 5, Name: 'Report Sky', Year: 2015, Month: 2 }
];
$scope.desc = function (arr) {
return $('min')
($('map')(arr, '-Year'));
};
我正在尝试按降序检索Year
值列表,因此我可以在AngularJs的orderBy
过滤器中使用它们。
因此,对于上述数据,我想要[2016, 2015]
。
我怎么能得到它?
答案 0 :(得分:0)
我不知道Angular是否有特定的东西来帮助解决这个问题,但是在JavaScript中它是相当直接的:确定唯一的年份列表,然后按降序对它们进行排序。
以下是通过使用密钥构建多年的对象来实现此目的的一个例子:
var data = [
{ Id: 1, Name: 'Report One', Year: 2016, Month: 5 },
{ Id: 2, Name: 'Report Core', Year: 2016, Month: 5 },
{ Id: 3, Name: 'Report Alpha', Year: 2016, Month: 3 },
{ Id: 4, Name: 'Report Moon', Year: 2015, Month: 5 },
{ Id: 5, Name: 'Report Sky', Year: 2015, Month: 2 }
];
var years = getUnique(data, "Year").sort(function(a, b) {
// Sorts numerically in descending order
return b - a;
});
function getUnique(array, prop) {
var obj = Object.create(null);
array.forEach(function(entry) {
obj[entry[prop]] = true;
});
return Object.keys(obj);
}
// Show result
document.body.innerHTML = JSON.stringify(years);

我将getUnique
分成一个函数,以防你需要将其重用于其他类似的东西。
在ES2015环境中,您可以使用set
而不是对象(和箭头功能)。
答案 1 :(得分:0)
使用带角度的loadash。
_.reverse(_.sortedUniq(_.map(a,'Year')))