2016-01-04 2 views
1

У меня есть структура данных, которая выглядит как этотИспользование findWhere с вложенными объектами в массиве

var foo = [ 
    { 
     bar: { 
      something: 123 
     }, 
     baz: { 
      somethingElse: 321 
     } 
    }, 
    { 
     bar: { 
      something: 444 
     }, 
     baz: { 
      somethingElse: 555 
     } 
    } 
]; 

Я тогда переменную:

var findMe = 444; 

я хотел бы искать через мои данные foo struct (массив объектов), чтобы увидеть, соответствует ли findMe свойству bar.something любого из объектов внутри массива foo.

Использование underscore.js, я бы подумал, следующий фрагмент кода будет делать трюк:

var _ = require('underscore'); 
var thingImLookingFor = _.findWhere(foo, {bar.something: findMe}); 

Однако это приводит к синтаксической ошибке в моем приложении:

Uncaught SyntaxError: Unexpected token .

ли кто-нибудь способный пролить свет на то, как я могу добиться поиска, который я ищу?

Спасибо!

+1

вам нужно выполнить глубокий поиск http://stackoverflow.com/questions/17578725/underscore-js-findwhere-nested-objects – YarGnawh

+1

или вы можете попробовать что-то с JSONPath HTTP: // goessner. net/articles/JsonPath/ – YarGnawh

+0

@YarGnawh спасибо за ответы :) К счастью, потому что точно точно, насколько глубокий поиск и какие именно ключи нужно искать, я могу использовать find(). Я не уверен в производительности, которую имеет подход, но из моих тестов он выглядит хорошо :) –

ответ

1

Обнаружил решение моего вопроса.

_.find() делает то, что я хочу довольно красиво.

_.find(foo, function(obj) { 
    return obj.bar.something == findMe; 
}); 
Смежные вопросы