Existem resources de jquery para consultar matrizes multidimensionais de maneira semelhante ao DOM?

O que a pergunta diz …

O jQuery possui algum método que permita a consulta de um array multidimensional de objects de maneira similar ao DOM.

Então, por exemplo, obtenha uma lista de objects contidos em um array multidimensional com algum valor de propriedade correspondente – por exemplo, onde StartOfPeriod for maior que uma data especificada ou onde name == “Ben Alabaster”

Eu gostaria de evitar reinventar a roda se já existe algo lá fora.

Você não pode usar a syntax do seletor, mas o jQuery vem com $ .grep e $ .inArray , o que pode ser útil para isso. grep retorna uma nova matriz de elementos que correspondem a um predicado. inArray retorna o índice do primeiro elemento correspondente ou -1. Por exemplo:

 var matches = $.grep(array, function(el){ return el.StartOfPeriod > 2000; }); 

Estes são semelhantes aos methods ECMAScript padrão, Array.filter (simimlar para grep ) e Array.indexOf (semelhante a inArray ); O jQuery realmente usa Array.indexOf onde disponível. Existem também outros methods úteis do ECMAScript, como Array.every (todos os elementos correspondentes) e Array.some (pelo menos um correspondente). O MDC tem código que você pode adicionar ao seu projeto para que funcionem em navegadores que não tenham implementações nativas.

Você pode encontrar um plugin, mas não no núcleo do jQuery. Existem alguns methods de matriz úteis: each , unique , inArray . Em combinação, você pode criar algo personalizado para atender às suas necessidades.

O que você está procurando é mais uma biblioteca de conjuntos com xpath como travessia. O protótipo tem um conjunto muito maior de methods de matriz. Mas ainda provavelmente não atenderia às suas necessidades exatas.

Concordo com alex , tal biblioteca / extensão seria interessante.

Eu só escrevi isso .. Eu acho que funciona corretamente, mas definitivamente poderia ser limpo 🙂

 function findMatchingObjects(obj, member, value){ var final = new Array(); var temp = new Array(); for(var p in obj){ if (typeof obj[p] == 'object' ) { temp = findMatchingObjects(obj[p], member, value); if (temp.length == 1) final.push(temp[0]); } if (p == member && obj[p] == value) { final.push(obj); } } alert(final.length); return final; } 

Use assim:

 var moo ={baz: 1, boo: 2, bar:{c1: 3, c2: 4, c3:{t:true, f:false, baz:1}},d: 11}; var foo = findMatchingObjects(moo, "baz", 1); // did it work? console.log(foo); 

Retorna uma matriz de objects (ou sub-objects ) que correspondem ao par membro-valor. Nesse caso, foo contém ambos moo e c3 pois ambos os objects contêm um par baz = 1 .

Tornar a function parecida com um seletor de jQuery é apenas uma questão de açúcar sintático.