过滤 1 属性 上的对象数组不限于文本开头
Filtering an array of objects on 1 property not limited to start of text
我正在尝试将 lodash 与 ngMaterial 和 md-autocomplete 相结合。
我在一个数组中有一组用户对象:
var User.collection = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 34 },
{ 'user': 'fred', 'age': 42 },
{ 'user': 'barney', 'age': 36 }
];
我正在尝试将此列表过滤为 return 仅匹配搜索查询的列表,例如
var query = "fr"
我得到了与这个控制器功能一起工作的过滤器:
collectionFilter: function(query) {
var lowercaseQuery = angular.lowercase(query);
return _.filter(User.collection, function(obj) {
return (angular.lowercase(obj.name).indexOf(lowercaseQuery) === 0)
})
}
问题在于,如果我像 "rne" 这样在名字的中间键入星号,我将不会得到任何结果。
您正在检查 === 0
。尝试 > -1
。
Indexof returns 参数在字符串中的索引(位置)。第一个位置是 0。这就是为什么它只显示从第一个字符开始匹配的结果。
如果愿意,请尝试将其更改为 === 1
并搜索 "re"。
我正在尝试将 lodash 与 ngMaterial 和 md-autocomplete 相结合。
我在一个数组中有一组用户对象:
var User.collection = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 34 },
{ 'user': 'fred', 'age': 42 },
{ 'user': 'barney', 'age': 36 }
];
我正在尝试将此列表过滤为 return 仅匹配搜索查询的列表,例如
var query = "fr"
我得到了与这个控制器功能一起工作的过滤器:
collectionFilter: function(query) {
var lowercaseQuery = angular.lowercase(query);
return _.filter(User.collection, function(obj) {
return (angular.lowercase(obj.name).indexOf(lowercaseQuery) === 0)
})
}
问题在于,如果我像 "rne" 这样在名字的中间键入星号,我将不会得到任何结果。
您正在检查 === 0
。尝试 > -1
。
Indexof returns 参数在字符串中的索引(位置)。第一个位置是 0。这就是为什么它只显示从第一个字符开始匹配的结果。
如果愿意,请尝试将其更改为 === 1
并搜索 "re"。