У меня есть древовидная структура, подобная данным, в которой я хочу выполнить поиск, а затем вернуть только определенный дочерний узел, включая корневой родительский узел. Поиск в основном работает на родительских дочерних узлах и его дочерних узлах на основе текста, введенного пользователем. Пожалуйста, проверьте следующий пример кода. Также, как мы можем оптимизировать код, чтобы получить следующий желаемый результат?
пример: в результате 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">