angularjs重新排序基于给定数组的重复结果

时间:2016-06-07 04:59:28

标签: javascript arrays angularjs

我正在学习Angularjs,我有一个小问题:

我从用户

返回了以下数组
userPreferences = [7,5,4]

我有一个对象,我正在使用ng-repeat来显示所有新闻,看起来像这样:

{
    "id": 1,
    "preferences": [
      3,
      4
    ]
}

所以,我想在我的ng-repeat中使用,从用户首选项返回的数组,并首先对显示首选项的新闻进行排序,然后在其他新闻下面排序,是否可能?

类似的东西:

<li ng-repeat="new in news | filter:{'userPreferences' : new.preferences}">

我真的不知道我是否必须使用filter,orderBy或sort,请帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以拥有自己的函数,返回范围内匹配的preferences的编号:

function intersect(array1, array2) {
    return $filter('filter')(array1, function(n){
    return array2.indexOf(n) != -1;
  });
}

$scope.matchedPreferences = function(n) {
    return intersect(n.preferences, $scope.userPreferences).length;
};

并将其传递给orderBy过滤器:

<li ng-repeat="n in news | orderBy:matchedPreferences:true">{{n}}</li>

这将按照匹配的首选项的数量按降序排序新闻。

这里是Fiddle