matriz de filtro de javascript de objects

Eu tenho uma matriz de objects e estou querendo saber a melhor maneira de pesquisá-lo. Dado o exemplo abaixo, como posso procurar por name = "Joe" e age < 30 ? Existe alguma coisa que jQuery pode ajudar ou eu tenho que fazer força bruta essa busca eu mesmo?

 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); 

Você pode usar jQuery.grep() :

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

DEMO: http://jsfiddle.net/ejPV4/

Você pode fazer isso muito facilmente com o método [].filter :

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

Você precisará adicionar um shim para navegadores que não suportam o método [].filter : essa página do MDN fornece esse código.

Você pode utilizar a function jQuery.filter () para retornar elementos de um subconjunto dos elementos correspondentes.

 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); }); 
  
 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 alert(JSON.stringify(filteredValue)); 

Pergunta tão rápida. E se você tiver duas matrizes de objects e quiser “alinhar” essas matrizes de objects para garantir que os objects de cada array estejam na mesma ordem que os da outra matriz? E se você não souber quais chaves e valores qualquer um dos objects dentro dos arrays contém … Muito menos em que ordem eles estão?

Então você precisa de uma ‘WildCard Expression’ para seu [].filter , [].map , etc. Como você obtém uma expressão curinga?

 var jux = (function(){ 'use strict'; function wildExp(obj){ var keysCrude = Object.keys(obj), keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '), keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '), keys = [].concat(keysA, keysB) .sort(function(a, b){ return a.substring(1, a.length) > b.substring(1, b.length); }); var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a'); return exp; } return { sort: wildExp }; })(); var sortKeys = { k: 'v', key: 'val', n: 'p', name: 'param' }; var objArray = [ { k: 'z', key: 'g', n: 'a', name: 'b' }, { k: 'y', key: 'h', n: 'b', name: 't' }, { k: 'x', key: 'o', n: 'a', name: 'c' } ]; var exp = jux.sort(sortKeys); console.log('@juxSort Expression:', exp); console.log('@juxSort:', objArray.sort(function(a, b){ return eval(exp); })); 

Você também pode usar essa function em uma iteração para cada object para criar uma expressão coletiva melhor para todas as chaves em cada um de seus objects e, em seguida, filtrar sua matriz dessa maneira.

Este é um pequeno trecho do Juxtapose API que eu tenho quase completo, o que faz isso, igualdade de object com isenções, unidades de object e condensação de matriz. Se estas são coisas que você precisa ou deseja para o seu projeto, por favor, comente e eu farei a biblioteca acessível mais cedo ou mais tarde.

Espero que isto ajude! Codificação feliz 🙂

 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" } ]; const res = _.filter(names, (name) => { return name.name == "Joe" && name.age < 30; }); console.log(res);