Я только что написал это .. Я думаю, что это работает должным образом, но это определенно можно очистить:)
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;
}
Используйте это так:
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);
Возвращает массив объектов (или подобъектов ), которые соответствуют паре член-значение. В этом случае foo
содержит как moo
, так и c3
, поскольку оба объекта содержат пару baz = 1
.
Создание функции, похожей на селектор jQuery, - дело синтаксического сахара.