2017-05-26 2 views
0

J'ai tableau d'objets similaires à cette structure:Boucle à travers tous les biens arrray des objets

array = [ 
    {name: "Alex", content: "Lorem"}, 
    {name: "Bob", content: "Lorem"} 
    ... 
] 

Ce tableau est mappée sur la table html. J'essaye de construire la méthode de recherche, qui va comparer chaque propriété de l'objet et les retourner, qui contient le mot, que je cherche. J'ai déjà construit la méthode, qui fonctionne. Cela fonctionne bien, mais j'ai besoin de spécifier le nom de chaque propriété d'objet un par un. Je voudrais avoir quelque chose de plus universel, où il passera à travers tous les noms de propriétés. J'ai déjà essayé avec la méthode:

for(let property in item) 

Mais ne fonctionne pas pour moi. Pouvez-vous conseiller quelque chose? Ah, je veux éviter jQuery.

Cheers, Daniel

+0

comment regarder devrait regarder le résultat comme? voulez-vous seulement le premier trouvé? –

+0

Maintenant, il renvoie l'élément s'il contient le mot recherché dans la propriété name. Je voudrais rechercher aussi dans la propriété de contenu. Le fait est que j'ai beaucoup plus de propriétés, donc j'ai besoin d'une méthode automatique pour rechercher dans toutes les propriétés possibles de l'objet. –

Répondre

2

Vous pouvez utiliser some et Object.keys comme ceci:

if(search_word){ 
    let l_search_word = search_word.toLowerCase(); 
    licenses = licenses.filter(item => 
     Object.keys(item).some(key => 
      item[key].toLowerCase().indexOf(l_search_word) !== -1 
     ) 
    ) 
} 

Au lieu de indexOf, vous pouvez également utiliser includes:

item[key].toLowerCase().includes(l_search_word) 
+0

Merci beaucoup. 'item [clé] .toLowerCase n'est pas une fonction'. Im obtenir cette erreur, mais probablement je vais le résoudre par moi-même :). –

+0

On dirait que c'est la meilleure solution. Le plus rapide à coup sûr. Seule chose. Avant d'utiliser la fonction toLowerCase, il faut analyser l'élément [key] à la chaîne 'item [clé] .toString(). ToLowerCase(). IndexOf (l_search_word)! == -1' –

+0

' toString() 'est nécessaire quand' item [clé] 'n'est pas une chaîne. Dans votre question, il a été suggéré qu'ils étaient des ficelles. De toute façon, soyez prudent avec 'toString', cela peut conduire à des correspondances qui ne vous intéressent pas. Par exemple, si' item [clé] 'est un tableau, alors' toString' produira une chaîne avec des virgules, et si votre recherche chaîne a une virgule, cela peut conduire à une correspondance à laquelle vous ne vous attendiez pas. – trincot

2

Pourquoi ne pas vous venez stringify l'objet complet

if(search_word){ 
    licenses = licenses.filter((item) => { 
     if(JSON.stringify(item).toLowerCase().indexOf(search_word.toLowerCase()) !== -1){ 
      return item; 
     } 
    }) 
} 

sera temps efficace si votre objet est de grande taille et aussi cette façon, vous aurez pas besoin de vérifier toutes les propriétés.

Une chose qui va manquer, c'est que si quelqu'un recherche name ou content alors tout va apparaître.

+0

Fonctionne bien! Prêt hors de la boîte: D. Ce qui est intéressant, il recherche aussi dans les noms de propriétés, mais pas tous: D. –