Вот мое решение, оно соответствует заданной строке / значению с помощью теста regex и возвращает сопоставленный массив. Это не рекурсивно, однако вы удалили это из своего вопроса.
Это из моего ответа в следующем потоке: Поиск объекта JavaScript
Те же принципы, что и другие, предлагаемые - поиск объекта для данного значения , для тех, кто ищет это решение.
Функция:
Array.prototype.findValue = function(name, value){
var array = $.map(this, function(v,i){
var haystack = v[name];
var needle = new RegExp(value);
// check for string in haystack
// return the matched item if true, or null otherwise
return needle.test(haystack) ? v : null;
});
return this;
}
Ваш объект:
myObject = {
name : "soccer",
elems : [
{name : "FC Barcelona"},
{name : "Liverpool FC"}
]
},
{
name : "basketball",
elems : [
{name : "Dallas Mavericks"}
]
}
Для использования:
(Это приведет к поиску вашего объекта myObject.
var matched = myObject.elems.findValue('name', 'FC');
console.log(matched);
Результат - проверьте консоль:
[Object, Object, keepMatching: function, findValue: function]
0: Object
name: "FC Barcelona"
__proto__: Object
1: Object
name: "Liverpool FC"
__proto__: Object
length: 2
__proto__: Array[0]
Если вы хотите получить точное совпадение, вы просто измените регулярное выражение в тройном выражении соответствует базовому значению. то есть
v[name] === value ? v : null