2016-06-09 3 views
0

У меня есть сложный объект (объект пользователя), в котором есть вложенные массивы и вложенные объекты.AngularJS/Javascript: найти совпадение строк во вложенном объекте

У меня есть фильтр поиска, который также является относительно сложным (флажки, определяющие, какие элементы возвращаются вместе с поисковым вводом).

В настоящее время я ищу в объекте, как так:

for(var key in item){ 
    if(item[key] && item[key].length && String(item[key]).toLowerCase().indexOf($rootScope.filt.searchFilter.toLowerCase()) !== -1){ 
    realSave = true; 
    } 
} 

Однако, это работает только для первого слоя объектов в пределах элемента; Мне также нужно искать объекты внутри объектов.

Как я могу это сделать? Это проще, чем выше? (Обратите внимание, что я не могу просто использовать ng-repeat="item in items | searchFilter", как это необходимо также проанализировать флажки и возвращать значения соответственно.

ответ

1

Попробуйте

realSave = (JSON.stringify(item).indexOf($rootScope.filt.searchFilter.toLowerCase()) !== -1) 

(Это длинная линия, прокрутка вправо)

It превратит ваш весь объект в одну строку, то вы можете искать подстроки, которую вы ищете где-нибудь внутри

+0

Действительно? Я попытался найти способ преобразования целого объекта в строку и получил множество бесполезных ответов. Благодаря! – Jascination

+0

Не беспокойтесь! Пожалуйста, не забудьте подтвердить свой ответ, если он решит вашу проблему. –

+0

Слишком много ограничений в этом подходе, как специальные символы и поиск в именах полей, а не значения. –

0

вы можете использовать угловой фильтр, как это:.

app.controller('MainCtrl', function($scope, $filter) { 
    $scope.a = [{name : 'pit'}, {name : {a : 'pit'}}, {name : { a : { b : 'pit'}}}]; 
    $scope.find = $filter('filter')($scope.a, 'pit'); 
}); 

http://plnkr.co/edit/TenLILkXJ0zwqMVtAj35?p=preview

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