当我在字段中键入G时,它会过滤掉名称中包含g的所有名称。我只想过滤以G开头。为了对此进行排序,我添加了类似的内容。
patientSearchResult[i].LastName.toUpperCase().charAt(0)
但现在我输入Gr。我没有得到格雷格的结果......为什么?
答案 0 :(得分:2)
您可以使用带有数组过滤器的正则表达式。试试这个:
var patients = [
"Greg",
"Anna",
"Slartibartfarst"
];
var input = "Gr";
var re = new RegExp(input+'.+$', 'i');
patients = patients.filter(function(e, i, a){
return e.search(re) != -1;
});
console.log(patients);
答案 1 :(得分:1)
charAt只返回指定索引处的字符。
您可以使用patientSearchResult[i].LastName.toUpperCase().substr(0,2)
,其中2
应替换为您要搜索的字符串的长度。
答案 2 :(得分:1)
对于更通用的解决方案,您可以使用Array.filter进行正则表达式搜索来创建查询函数:
var patientRecord = [
{firstname: 'Bob',lastname: 'Grown'},
{firstname: 'Alexa',lastname: 'Ace'},
{firstname: 'Chris',lastname: 'Green'}
];
var makeQuery = function(property, regexp) {
// return a callback function for filter, see MDC docs for Array.filter
return function(elem, index, array) {
return elem[property].search(regexp) !== -1;
};
};
var q = makeQuery('lastname', /^g/i); // ^ = from beginning, i = "ignore case"
patientRecord.filter(q);
控制台输出:
[
{
firstname: "Bob",
lastname: "Grown",
__proto__: Object
},
{
firstname: "Chris",
lastname: "Green",
__proto__: Object
}
]