angularjs – 如何使用orderBy按角度最接近的匹配进行排序

前端之家收集整理的这篇文章主要介绍了angularjs – 如何使用orderBy按角度最接近的匹配进行排序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在ng-repeat指令中处理很长的列表.
我有一个搜索框,我想按最接近的匹配进行筛选.

例如:
如果我有:

>你好,你好吗?
>你好,你今天过得怎么样?
>你好兄弟

搜索“你好”

我希望“你好兄弟”首先出现,因为它是远离搜索字符串的最少字符数.

解决方法

如果要使字符数更重要,可以按字符串长度排序.

orderBy: 'string.length'

Here是一个掠夺者的例子.哪个没有多大意义,但证明这是有效的.

您还可以查看filters并进行自定义排序.

以下是您可以做的一个小例子

app.filter('sortByLength',function() {

  return function(items) {
    items.sort(function (a,b) {    
      return (a.length > b.length ? 1 : -1);
    });
    return items;
  };
});

如果你想要,你可以将搜索字符串作为参数引入angularjs上的过滤器外观.更多信息
 here.

app.filter('sortByMatch',function() {
  return function(items,searchString) {
    var re = new RegExp("[" + searchString + "]","g"); 
    items.sort(function (a,b) { 

      if (!searchString) {
        return input;
      }
      var matchingCharsA = a.length - (a.match(re) || []).length; 
      var matchingCharsB = b.length - (b.match(re) || []).length;

      return (matchingCharsA > matchingCharsB ? 1 : -1);
    });
    return items;
  };
});

你可以像这样使用它.

ng-repeat="item in.... | sortByMatch: searchString

我希望这有帮助.

猜你在找的Angularjs相关文章