J'ai un tableau avec des valeurs. Comment puis-je rechercher dans ce tableau en utilisant jQuery une valeur qui lui correspond ou qui est proche?
var a = ["foo","fool","cool","god"];
Si je veux rechercher oo
, alors il devrait renvoyer foo
, fool
et cool
car ces chaînes contiennent oo
.
Mise à jour
Pour rechercher dans le tableau avec Vanilla js, je voudrais utiliser la méthode filter()
implémentée dans le prototype Array
let a = ["foo","fool","cool","god"];
let b = a.filter(item => item.indexOf('oo') > -1);
console.log(b); // ["foo","fool","cool"]
const fruits = ['Apple', 'banana', 'grapes', 'mango', 'orange'];
const filterItems = (needle, heystack) => {
let query = needle.toLowerCase();
return heystack.filter(item => item.toLowerCase().indexOf(needle) >= 0);
}
console.log(filterItems('ap', fruits)); // ['Apple', 'grapes']
console.log(filterItems('ang', fruits)); // ['mango', 'orange']
var fruits = ['Apple', 'banana', 'grapes', 'mango', 'orange'];
function filterItems(needle, heystack) {
var query = needle.toLowerCase();
return heystack.filter(function(item) {
return item.toLowerCase().indexOf(query) >= 0;
})
}
console.log(filterItems('ap', fruits)); // ['Apple', 'grapes']
console.log(filterItems('ang', fruits)); // ['mango', 'orange']
Ceci est la réponse obsolète
Pour rechercher dans le tableau avec jQuery, vous pouvez utiliser jQuery.grep()
ou jQuery.map()
. Les deux renvoient un nouveau tableau avec des éléments filtrés à l'aide d'une fonction de rappel.
L'implémentation la plus rapide (insensible à la casse) utilise indexOf
et toUpperCase
dans le rappel:
var search_term = 'oo'; // your search term as string
var search = search_term.toUpperCase();
var array = jQuery.grep(a, function(value) {
return value.toUpperCase().indexOf(search) >= 0;
});
Si vous n'avez pas besoin de recherche insensible à la casse, vous pouvez supprimer les deux fonctions .toUpperCase()
pour l'accélérer davantage.
Plus souple mais beaucoup plus lent (suffisant pour les petits tableaux) consiste à utiliser une expression régulière:
var search_term = "oo"; // search term
var search = new RegExp(search_term , "i");
var arr = jQuery.grep(a, function (value) {
return search.test(value);
});
ou
var search_term = "oo"; // search term
var search = new RegExp(search_term , "i");
var arr = jQuery.map(a, function (value) {
return value.match(search) ? value : null;
});
Les expressions régulières vous permettent d'effectuer des recherches beaucoup plus complexes que %value%
. Cependant, ne l'utilisez pas si vous n'en avez pas besoin car il est plusieurs fois plus lent.
vous devriez obtenir un tableau arr
avec les éléments correspondants
function find(arr) {
var result = [];
for (var i in arr) {
if (arr[i].match(/oo/)) {
result.Push(arr[i]);
}
}
return result;
}
window.onload = function() {
console.log(find(['foo', 'fool', 'cool', 'god']));
};
Il imprime ["foo", "fool", "cool"]
Essayez le code js suivant
function likeMatch(q)
{
my_arr = ["foo","fool","cool","god"];
var rArr=[];
for(var t in my_arr)
{
if(my_arr[t].indexOf(q)>0)
rArr.Push(my_arr[t]);
}
return(rArr);
}
essaye ça:
var infoData = ["foo","fool","cool","god"],
search = 'oo';
//this makes the magic
infoData = $$(infoData).filter(function(){
return (this.search(search) >= 0)
})
var n = infoData.length;
console.log("size result: "+ n );
for(var item = 0; item < n ;item++){
console.log("item: "+item+" data : "+infoData[item]);
}
résultat:
size result: 3
item: 0 data : foo
item: 1 data : fool
item: 2 data : cool
utilisez la fonction suivante si vous recherchez dans un tableau contenant un objet hash
function searchInArrayofHashes(array,key,keyword) {
responsearr = []
for(i=0;i<array.length;i++) {
if(array[i][key].indexOf(keyword) > -1 ) {
responsearr.Push(array[i])
}
}
return responsearr
}
try $.inArray
http://api.jquery.com/jQuery.inArray/ . Je ne sais pas si cela vous permettra d'utiliser une expression régulière, mais ça vaut le coup d'essayer
Vous pouvez le faire avec Bibliothèque Alasql JavaScript SQL. Il supporte l'opérateur LIKE, comme en SQL
var a = ["foo","fool","cool","god"];
var searchString = "%oo%";
var res = alasql('SELECT COLUMN * FROM [?] WHERE [0] LIKE ?',[a, searchString]);
Essayez cet exemple à jfFiddle.