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

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

本文关键字:字符串 搜索 第一位 开头 显示 默认 配置 我可以 过滤器      更新时间:2023-09-26

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

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

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

它似乎足够通用的功能,应该有一个配置,或者可能是一个我可以从 github 获取的通用过滤器?

我认为使用角度顺序与一个函数一起使用,该函数检查字符串是否以 C 开头并返回正确的 asc 值,它会满足您的需求。问题是它在按起始字符排序后会做什么,它是否返回数组的当前序数,不知道这对你是否重要。

一些伪:

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

我希望角度能允许你按函数将更多的参数传递到顺序中。