使用JavaScript搜索名称

时间:2011-05-28 00:19:40

标签: javascript

当我在字段中键入G时,它会过滤掉名称中包含g的所有名称。我只想过滤以G开头。为了对此进行排序,我添加了类似的内容。

patientSearchResult[i].LastName.toUpperCase().charAt(0)

但现在我输入Gr。我没有得到格雷格的结果......为什么?

3 个答案:

答案 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);

http://jsfiddle.net/2R44X/

答案 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
    }
]