我有一个非常复杂的多维数组.
每个项目都像(此代码显示推送到数组的var):
var arrayItem = {
'itemId': '00001',
'itemName': 'Biscuits',
'parentId': 'Food',
'children': []
};
Run Code Online (Sandbox Code Playgroud)
itemId始终是唯一的.children数组中填充了更多arrayItem(s).因此,数组可以具有多个级别(可能最多9个,但可能更多) - 因此基础数组具有x个对象,并且每个对象可以具有y个子对象,依此类推......
有没有办法搜索特定的itemId.我尝试了各种各样的.each方法,但我似乎无法搜索多维数组的所有级别.
任何帮助深表感谢.
编辑:
经过几年的经验和Array原型改进,以下是我如何解决问题:
function find(arr, id) {
return arr.find(item => item.itemId === id)
|| arr.reduce((found, curr) => found || find(curr.children, id), undefined)
}
Run Code Online (Sandbox Code Playgroud)
这将通过对象图执行广度优先搜索,undefined如果它不包含您要查找的ID ,则返回.
原始答案:
function finder(arr, id){
arr = [].concat(arr);
for(var i = 0; i<arr.length; i++){
if(arr[i].itemId == id){
return arr[i];
}else if(arr[i].children.length){
var val = finder(arr[i].children, id);
if(val){
return val;
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
通过查找您的数组和所需的ID,它将找到并返回具有该ID的数组项.
像这样使用它:
var arr = [{
'itemId': '00001',
'itemName': 'Biscuits',
'parentId': 'Food',
'children': [{
'itemId': '00002',
'itemName': 'Sweet',
'parentId': 'Biscuits',
'children': [{
'itemId': '00004',
'itemName': 'Chocolate',
'parentId': 'Sweet',
'children': []
}]
}, {
'itemId': '00003',
'itemName': 'Salty',
'parentId': 'Biscuits',
'children': []
}]
}];
var chocolate = finder(arr,"00004");
Run Code Online (Sandbox Code Playgroud)