2

我有一个非常复杂的多维数组。

每个项目都像(此代码显示了推送到数组的 var):

var arrayItem = {
                'itemId': '00001',
                'itemName': 'Biscuits',
                'parentId': 'Food',
                'children': []
            };

itemId 始终是唯一的。children 数组中填充了更多arrayItem(s)。因此,该数组可以有很多级别(可能最多 9 个,但可能更多) - 所以基本数组有 x 个对象,每个对象可以有 y 个子对象等等......

有没有办法搜索特定的itemId. 我尝试了各种 .each 方法,但似乎无法搜索多维数组的所有级别。

任何帮助深表感谢。

4

1 回答 1

7

编辑:

经过几年的经验和Array原型改进,这是我解决问题的方法:

function find(arr, id) {
    return arr.find(item => item.itemId === id) 
        || arr.reduce((found, curr) => found || find(curr.children, id), undefined)
}

这将通过对象图执行广度优先搜索,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;        
}

通过 finder 你的数组和所需的 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");

在这里演示:http: //jsfiddle.net/mVyha/

于 2012-11-15T13:27:03.617 回答