我可以配置默认的 angular 过滤器来显示字符串,以便以搜索词开头的字符串排在第一位吗?

Can I configure the default angular filter to display strings so that those that start with the search term come first?

在我的项目中,我们显示了一个巨大的字符串列表(有时超过 17,000 个),并带有一个输入框,用于使用过滤器对列表进行配对。我一直在使用 angular 的默认过滤器,直到有人要求我进行排序,以便以搜索查询开头的字符串排在仅包含它的单词之前。

假设我有一个字符串数组 $scope.array = ["aaa","abb","abc","bad","bcd","cool","cold"] 现在,如果我使用 query string 'c' 进行过滤,将按此顺序显示 'abc','bcd,'cool','cold'。但是,当大多数人开始使用 'c' 进行搜索时,他们可能希望首先看到 'cool' 和 'cold'。我希望数组是 'cool','cold','abc',bcd (或者如果按字母顺序排序是包的一部分,则可能是冷的然后很酷)我对编写自己的过滤器持谨慎态度,因为我宁愿使用如此大的尝试和真实的东西收集数据。

有没有办法在不编写我自己的自定义过滤器的情况下实现这一点?

这似乎是足够常见的功能,应该有一个配置或者可能是一个我可以从 github?

中获取的通用过滤器

我认为将 angular orderBy 与检查字符串是否以 C 开头和 returns 是否正确的 asc 值的函数一起使用,它将满足您的需要。问题是它按起始字符排序后会做什么,return 数组的当前序数,不知道这对你是否重要。

有些伪:

$scope.vm.filter = 'c'
$scope.orderByStartsWith = function(item) {
    return item.startsWith($scope.vm.filter) ? 0 : 1;
}

<li ng-repeat="item in array | filter:vm.filter | orderBy:orderByStartsWith" >{{item}}</li>

我希望 angular 允许您按功能将更多参数传递给订单。