Соответствие результатов поиска из списка деревьев - PullRequest
0 голосов
/ 11 января 2019

У меня есть древовидная структура, подобная данным, в которой я хочу выполнить поиск, а затем вернуть только определенный дочерний узел, включая корневой родительский узел. Поиск в основном работает на родительских дочерних узлах и его дочерних узлах на основе текста, введенного пользователем. Пожалуйста, проверьте следующий пример кода. Также, как мы можем оптимизировать код, чтобы получить следующий желаемый результат?

пример: в результате 1 он должен выглядеть как Android -> Оборудование -> NFC и Iphone -> Оборудование -> NFC

[{"Id":1,"Name":"Andriod","children":[{"Id":1,"Name":"Hardware","children":[{"Id":3,"Name":"NFC"}]},{"Id":2,"Name":"Iphone","children":[{"Id":1,"Name":"Hardware","children":[{"Id":3,"Name":"NFC"}]}]}]

пример: в Результате 2 это должно быть как Android -> Оборудование -> дочерние узлы и Iphone -> Оборудование -> дочерние узлы

[{"Id":1,"Name":"Andriod","children":[{"Id":1,"Name":"Hardware","children":[{"Id":1,"Name":"Dual Sim"},{"Id":2,"Name":"LTE"},{"Id":3,"Name":"NFC"}]},{"Id":2,"Name":"Iphone","children":[{"Id":1,"Name":"Hardware","children":[{"Id":1,"Name":"Single Sim"},{"Id":2,"Name":"LTE"},{"Id":3,"Name":"NFC"}]}]

//data tree list
var dataList =  [{
    Id: 1, Name : 'Andriod', children: 
    [{
      Id: 1, Name : 'Hardware', children: [ 
        {Id: 1, Name : 'Dual Sim'},
        {Id: 2, Name : 'LTE'},
        {Id: 3, Name : 'NFC'}
     ]
	 },
     {Id: 2, Name : 'Software', children:
     [
        {Id: 1, Name : 'Nougot'},
        {Id: 2, Name : 'Oreo'}
     ] 
   }]
   },
    {Id: 2, Name : 'Iphone', children:
    [{
      Id: 1, Name : 'Hardware', children: [ 
        {Id: 1, Name : 'Single Sim'},
        {Id: 2, Name : 'LTE'},
        {Id: 3, Name : 'NFC'}
     ]},
     {Id: 2, Name : 'Software', children:
     [
        {Id: 1, Name : 'iOS 11'},
        {Id: 2, Name : 'iOS 10'}
     ] 
  }]
}]

//Search Criteria
var searchText = "NFC";
var searchText2 = "Hardware";

//Search logic
function searchData(val)
{
var isFound = false;
var searchList = $.grep(dataList, function(firstNode)
{
	if($.isArray(firstNode.children))
    {
       $.grep(firstNode.children, function(childNode)
       {
       
         if(childNode.Name.toLowerCase().indexOf(val.toLowerCase()) > -1)
         {
		   isFound = true;
		   return;
           //return firstNode;
         }
         else if($.isArray(childNode.children))
         {
             $.grep(childNode.children, function(childchildNode)
             {
                  if(childchildNode.Name.toLowerCase().indexOf(val.toLowerCase()) > -1)
                  {
				   isFound = true;
				   return;
                   //return firstNode;
                  }
             })
          }      
       
       })
    }
	if(isFound)
	{
	  isFound = false;
	  return firstNode;
	}
})
return searchList;
}
var a= searchData(searchText);
var b= searchData(searchText2);
$("#result1").html(searchText+" text Results -- " +JSON.stringify(a));
$("#result2").html(searchText2+" text Results -- "+JSON.stringify(b));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
Result
<div id="result1">
 
</div>
<br/>
<br/>
<div id="result2">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...