2016-01-11 81 views
1

我有一个名为雇员名称的数组,例如。字符串和返回匹配的搜索数组^

var names = ['Jordan,Michael','Davis,Jordan','Franco,James','Rogen,Seth','Griffin,Peter','James,Tim',..] 

我想一个功能添加到我的网页,以允许用户键入他们正在寻找的名称,可以看到大家用这个名字。所以如果用户输入乔丹。乔丹,迈克尔和戴维斯都会回来。

有没有一种方法可以用javascript/jquery来做到这一点?

+0

是的,你可以做到这一点。 – Grumpy

+0

请参阅[“应该在其标题中包含”标签“?”](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中共识是“不,他们不应该”! –

+0

'var matches = result.filter(e => e.indexOf('Jordan')!== -1);' – Tushar

回答

4

使用Array.prototype.filter

var search = 'Jordan'; 
 
var names = ['Jordan,Michael','Davis,Jordan','Franco,James','Rogen,Seth','Griffin,Peter','James,Tim'] 
 

 
var results = names.filter(name => name.indexOf(search) > -1); 
 
console.log(results);


对于情况下,敏感的比赛,你需要使用正则表达式。

下面的代码片断假定有两个草堆只使用字母数字字符。特殊字符可以通过一个简单的替换被删除,str = str.replace(/[^a-zA-Z0-9]/g, '');

注:要允许特殊字符,它们需要进行转义。

var names = ['Jordan,Michael','Davis,Jordan','Franco,James','Rogen,Seth','Griffin,Peter','James,Tim'] 
 

 
var search = 'jorDan' // cAsE-InsEnsItIvE 
 
    regex = new RegExp(search, 'i'); 
 

 
var results = names.filter(name => regex.test(name)); 
 
console.log(results); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(results, 0, 4) + '</pre>';

+0

对于不敏感匹配的情况,使用带有“i”标志的正则表达式。 – Tushar

+0

@Tushar,啊,是的,这将是一个不错的附加组件:-) – AmmarCSE

+0

@Tushar你可以将RegEx添加到示例中吗?我不熟悉正则表达式 –

1

尝试为对象的一个​​这样的数组:

var names = [ 
    {firstName:'Jordan', lastName:'Michael'}, 
    {firstName:'Davis', lastName:'Jordan'}, 
] 

var searchedName = "Jordan"; 
var result = names.filter(function(searchedName) { 
    return names.firstName == searchedName || names.lastName == searchedName; 
}); 
0

这是一个模糊搜索领域,我想不出任何名字所以这一块有三个蒂姆斯以说明这一点。

它使用正则表达式来匹配当前输入到输入字段中的字母。

var names = [ 
 
    'Jordan,Michael', 
 
    'Davis,Jordan', 
 
    'Franco,James', 
 
    'Rogen,Seth', 
 
    'Griffin,Peter', 
 
    'James,Tim', 
 
    'Burton,Tim', 
 
    'Allen,Tim' 
 
]; 
 

 
var 
 
    input = document.querySelector('#input'), 
 
    results = document.querySelector('#results'); 
 

 
input.addEventListener('keyup', function(e) { 
 
    filterNames(this.value); 
 
}); 
 

 
// init the filter; 
 
filterNames(''); 
 

 
// helper to filter the names array by a value 
 
function filterNames(value){ 
 
    results.innerHTML = names.filter(function(name) { 
 
    return name.match(new RegExp(value.split('').join('.*'), 'ig')); 
 
    }).reduce(function(str, name) { 
 
    return str + '<li>' + name + '</li>'; 
 
    }, ''); 
 
}
<input type="text" id="input"> 
 
<ul id="results"></ul>

相关问题