如何在深层嵌套数组中搜索

时间:2017-08-17 07:39:39

标签: angularjs arrays search filter nested

我想在我的数组中搜索一个字符串。我的问题是我的数组非常大并且有许多嵌套数组。

看起来像这样:

[  
   {  
      "Id":null,
      "Text":"Marketing",
      "Gruppen":[  
         {  
            "Id":null,
            "Text":"Werbeartikel",
            "Gruppen":[  
               {  
                  "Id":null,
                  "Text":"Werbegeschenk Hobby, Freizeit",
                  "Gruppen":[  
                     {  
                        "Id":"51004839",
                        "Text":"Taschenmesser (Werbeartikel)",
                        "Gruppen":null
                     },
                     {  
                        "Id":"51004843",
                        "Text":"Schirm (Werbeartikel)",
                        "Gruppen":null
                     },
                     {  
                        "Id":"51004845",
                        "Text":"Sportartikel (Werbeartikel)",
                        "Gruppen":null
                     }
                  ]
               }
            ]
         }
      ]
   }
]

现在我想搜索(Taschenmesser)。我只需要查找所有“文本”字段。

我不知道该怎么做。 我希望得到结果:,

{  
 "Id":"51004839",
 "Text":"Taschenmesser (Werbeartikel)",
 "Gruppen":null
}

这是我搜索的方法。但它不会搜索嵌套的嵌套嵌套数组:

$scope.SearchForGroup = function (pSearchText) {
        var lGruppe = $filter('filter')($scope.WarenGruppenResponse.WarenGruppe, "Schirm")

    };

这里是plunker演示问题http://plnkr.co/edit/l0cnZQPAh2HXLX1yTnLl?p=info

1 个答案:

答案 0 :(得分:0)

由于您有嵌套列表,因此您可以在此处发布搜索算法:LINK

我会在输入上使用观察器并生成新数组:

 $scope.search = '';

  $scope.foundItems = [];

    function searchTree(element, matchingTitle){
     if(element.Text.indexOf(matchingTitle) > -1){
          return element;
     }else if (element.Gruppen != null){
          var i;
          var result = null;
          for(i=0; result == null && i < element.Gruppen.length; i++){
               result = searchTree(element.Gruppen[i], matchingTitle);
          }
          return result;
     }
     return null;
}

    $scope.$watch(function () {
        return $scope.search;
    },
            function (newVal, oldVal) {

                $scope.foundItems = [];

                if (newVal !== undefined && newVal !== oldVal && newVal !== '') {


                    var result = searchTree($scope.data[0], newVal);

                   console.log(result);

                   $scope.foundItems.push(result);

                }
   });

DEMO