conjunto de objetos de filtro javascript

Resuelto user441521 asked hace 12 años • 8 respuestas

Tengo una variedad de objetos y me pregunto cuál es la mejor manera de buscarlos. Dado el siguiente ejemplo, ¿cómo puedo buscar name = "Joe"y age < 30? ¿Hay algo en lo que jQuery pueda ayudar o tengo que forzar esta búsqueda yo mismo?

var names = new Array();

var object = { name : "Joe", age:20, email: "[email protected]"};
names.push(object);

object = { name : "Mike", age:50, email: "[email protected]"};
names.push(object);

object = { name : "Joe", age:45, email: "[email protected]"};
names.push(object);
user441521 avatar Nov 28 '12 06:11 user441521
Aceptado

Una solución moderna con Array.prototype.filter():

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

O si todavía usas jQuery, puedes usar jQuery.grep():

var found_names = $.grep(names, function(v) {
    return v.name === "Joe" && v.age < 30;
});
VisioN avatar Nov 27 '2012 23:11 VisioN

Puedes hacer esto muy fácilmente con el [].filtermétodo:

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

Puedes conocer más al respecto en esta página de MDN .

lonesomeday avatar Nov 27 '2012 23:11 lonesomeday

Puede utilizar la función jQuery.filter() para devolver elementos de un subconjunto de elementos coincidentes.

var names = [
    { name : "Joe", age:20, email: "[email protected]"},
    { name : "Mike", age:50, email: "[email protected]"},
    { name : "Joe", age:45, email: "[email protected]"}
   ];
   
   
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"/>
Expandir fragmento

Vadim Gremyachev avatar Sep 26 '2014 07:09 Vadim Gremyachev