95 votes

javascript filtre tableau d'objets

J'ai un tableau d'objets et je me demande quelle est la meilleure façon d'y effectuer une recherche. Dans l'exemple ci-dessous, comment puis-je rechercher name = "Joe" y age < 30 ? Est-ce que jQuery peut m'aider ou est-ce que je dois effectuer cette recherche par force brute moi-même ?

var names = new Array();

var object = { name : "Joe", age:20, email: "joe@hotmail.com"};
names.push(object);

object = { name : "Mike", age:50, email: "mike@hotmail.com"};
names.push(object);

object = { name : "Joe", age:45, email: "mike@hotmail.com"};
names.push(object);

0 votes

Par recherche, vous voulez dire filtre ?

0 votes

Recherche != filtre. Lequel voulez-vous ?

144voto

VisioN Points 62518

Une solution moderne avec Array.prototype.filter() :

const found_names = names.filter(v => v.name === "Joe" && v.age < 30);

Ou si vous utilisez toujours jQuery, vous pouvez utiliser jQuery.grep() :

var found_names = $.grep(names, function(v) {
    return v.name === "Joe" && v.age < 30;
});

81voto

lonesomeday Points 95456

Vous pouvez le faire très facilement avec le [].filter méthode :

var filterednames = names.filter(function(obj) {
    return (obj.name === "Joe") && (obj.age < 30);
});

Vous pouvez en savoir plus à ce sujet sur cette page MDN .

0 votes

Je suggère de jeter un coup d'œil au polyfill dans la page MDN liée, juste pour s'amuser à lire du code et apprendre quelque chose de nouveau, peut-être.

9voto

Vadim Gremyachev Points 2370

Vous pouvez utiliser jQuery.filter() pour retourner les éléments d'un sous-ensemble des éléments correspondants.

var names = [
    { name : "Joe", age:20, email: "joe@hotmail.com"},
    { name : "Mike", age:50, email: "mike@hotmail.com"},
    { name : "Joe", age:45, email: "mike@hotmail.com"}
   ];

var filteredNames = $(names).filter(function( idx ) {
    return names[idx].name === "Joe" && names[idx].age < 30;
}); 

$(filteredNames).each(function(){
     $('#output').append(this.name);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="output"/>

9voto

Fakhrul Hasan Points 44
var nameList = [
{name:'x', age:20, email:'x@email.com'},
{name:'y', age:60, email:'y@email.com'},
{name:'Joe', age:22, email:'joe@email.com'},
{name:'Abc', age:40, email:'abc@email.com'}
];

var filteredValue = nameList.filter(function (item) {
      return item.name == "Joe" && item.age < 30;
});

//To See Output Result as Array
console.log(JSON.stringify(filteredValue));

Vous pouvez simplement utiliser le javascript :)

7voto

Arun Kumar Saini Points 275

Pour ceux qui veulent filtrer à partir d'un tableau d'objets en utilisant n'importe quelle clé :

function filterItems(items, searchVal) {
  return items.filter((item) => Object.values(item).includes(searchVal));
}
let data = [
  { "name": "apple", "type": "fruit", "id": 123234 },
  { "name": "cat", "type": "animal", "id": 98989 },
  { "name": "something", "type": "other", "id": 656565 }]

console.log("Filtered by name: ", filterItems(data, "apple"));
console.log("Filtered by type: ", filterItems(data, "animal"));
console.log("Filtered by id: ", filterItems(data, 656565));

filtre à partir d'un tableau d'objets JSON:**

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X