按顺序返回对象数组中某些属性的唯一值的函数

时间:2016-04-17 17:19:06

标签: javascript arrays angularjs

这是我的数据

$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]

我怎么能得到它?

2 个答案:

答案 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')))