javascript - 如何通过对象数组中的id查找对象?

标签 javascript arrays

我有这个 json 文件:

var data = [{
    "id": 0,
    "parentId": null,
    "name": "Comapny",
    "children": [
        {
            "id": 1235,
            "parentId": 0,
            "name": "Experiences",
            "children": [
                {
                    "id": 3333,
                    "parentId": 154,
                    "name": "Lifestyle",
                    "children": []
                },
                {
                    "id": 319291392,
                    "parentId": 318767104,
                    "name": "Other Experiences",
                    "children": []
                }
            ]
        }
    ]
}];

我需要通过 id 查找对象。例如,如果需要查找 id:319291392 的对象,我必须获取:

{"id": 319291392,"parentId": 318767104,"name": "Other Experiences","children": []}

我怎样才能做到这一点?

我尝试使用此功能:

function findId(obj, id) {
    if (obj.id == id) {
        return obj;
    }
    if (obj.children) {
        for (var i = 0; i < obj.children.length; i++) {
            var found = findId(obj.children[i], id);
            if (found) {
                return found;
            }
        }
    }
    return false;
}

但它不起作用,因为它是一个对象数组。

最佳答案

如果你的起点是一个数组,你想稍微反转一下你的逻辑,从数组而不是对象开始:

function findId(array, id) {
    var i, found, obj;

    for (i = 0; i < array.length; ++i) {
        obj = array[i];
        if (obj.id == id) {
            return obj;
        }
        if (obj.children) {
            found = findId(obj.children, id);
            if (found) {
                return found;
            }
        }
    }
    return false; // <= You might consider null or undefined here
}

然后

var result = findId(data, 319291392);

...查找 id 319291392 的对象。

Live Example

关于javascript - 如何通过对象数组中的id查找对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605062/

相关文章:

javascript - 从js中的JSON获取第一级对象长度计数

javascript - 尝试获取选项卡 URL 时 Chrome 扩展 : Background. js "Uncaught TypeError"

c++ - 错误声明不兼容c++(数组)

c - 如何正确编写参数函数?

arrays - 删除 R 数组中的维度

javascript - 多个密码

javascript - 在 RxJS 中,如何在没有主题的情况下直接链接 pub 子系统中的生产者和消费者?

javascript - 有条件的 removeClass

python - 将一个 numpy 数组取另一个数组的子集

c++ - 数组在执行代码时不显示任何内容