2013-02-24 6 views
0

Мне нужно написать функцию фильтра, которая позволит мне запрос по вложенному объекту, например:Фильтрация объекта запроса, который содержит ссылку на вложенный объект

var data = [ 
      { twitter: { id: 1, name: "Bob" } }, 
      { twitter: { id: 2, name: "Jones" } } 
      ], 
    query = { 'twitter.id': 1 }; 

# Perform filter using data and query variables 
var search = … 

console.log(search); 
> ["0"] 

Фильтр должен возвращать массив индексов, соответствует запросу.

В настоящее время я работаю без поддержки вложенных объектов на http://jsbin.com/umeros/2/edit.

Однако, я хотел бы иметь возможность запрашивать вложенные объекты, например, query, описанные выше.

+0

Заканчивать [это сообщение] (http://stackoverflow.com/a/14397052/1048572), вы можете выбрать дублировать бесплатно. – Bergi

+0

проверить эту библиотеку http://jsonselect.org/#overview – jcubic

+0

Это не помогает @Bergi. – 2013-02-24 21:19:58

ответ

1

Использование функции ref из this answer, ваш фильтр должен выглядеть следующим образом:

var search = _.filter(_.keys(data), function (key) { 
    var obj = data[key]; 
    return _.every(query, function (val, queryKey) { 
     return ref(obj, queryKey) === val; 
    }); 
}); 
+0

Это будет работать только для одного свойства в 'query': http://jsbin.com/uqabog/1/edit. Можете ли вы придумать решение, которое будет работать с несколькими свойствами в 'query'? – 2013-02-24 22:31:29

+0

Теперь я немного смущен (извините), но, похоже, у меня это работает в ES5 (с чего я начал): http://jsbin.com/umeros/9/edit. Благодарю. – 2013-02-24 22:39:38

+0

[Это делается для нескольких] (http://jsbin.com/uqabog/3/edit). Только 'every' ожидает, что вы вернете' true', иначе он разрывает цикл, поскольку он уже знает, что * не каждый * элемент выполняет условие. – Bergi

Смежные вопросы