Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript I';m在API响应中接收一个对象数组,并且是嵌套数组。我想通过ID找到一个对象_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript I';m在API响应中接收一个对象数组,并且是嵌套数组。我想通过ID找到一个对象

Javascript I';m在API响应中接收一个对象数组,并且是嵌套数组。我想通过ID找到一个对象,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,您好,这里是一个从API响应接收的对象数组,我正在使用angular.js和javascript,我希望获取具有find by id的对象,id是“1_1_1”。这可能吗?我被卡住了。请帮忙 [ { "text": "folder 1", "parent": { "id": "1", "name": "folder 1" }, "children": [ {

您好,这里是一个从API响应接收的对象数组,我正在使用angular.js和javascript,我希望获取具有find by id的对象,id是“1_1_1”。这可能吗?我被卡住了。请帮忙

[
      {
        "text": "folder 1",
        "parent": {
          "id": "1",
          "name": "folder 1"
        },
        "children": [
          {
            "text": "folder 1_1",
            "parent": {
              "id": "1_1",
              "name": "folder 1_1"
            },
            "children": [
              {
                "text": "folder 1_1_1",
                "parent": {
                  "id": "1_1_1",
                  "name": "folder 1_1_1"
                },
                "children": []
              },
              {
                "text": "folder 1_1_2",
                "parent": {
                  "id": "1_1_2",
                  "name": "folder 1_1_2"
                },
                "children": []
              }
            ]
          },
          {
            "text": "folder 1_2",
            "parent": {
              "id": "1_2",
              "name": "folder 1_2"
            },
            "children": [
              {
                "text": "folder 1_2_1",
                "parent": {
                  "id": "1_2_1",
                  "name": "folder 1_2_1"
                },
                "children": []
              }
            ]
          }
        ]
      },
      {
        "text": "folder 2",
        "parent": {
          "id": "2",
          "name": "folder 2"
        },
        "children": [
          {
            "text" : "folder 2_1",
            "parent": {
              "id": "2_1",
              "name": "folder 2_1"
            },
            "children": []
          },
          {
            "text" : "folder 2_2",
            "parent": {
              "id": "2_2",
              "name": "folder 2_2"
            },
            "children": []
          },
          {
            "text" : "folder 2_3",
            "parent": {
              "id": "2_3",
              "name": "folder 2_3"
            },
            "children": [
              {
                "text" : "folder 2_3_1",
                "parent": {
                  "id": "2_3_1",
                  "name": "folder 2_3_1"
                },
                "children": []
              }
            ]
          },
        ]
      },
      {
       "text": "folder 3",
       "parent": {
         "id": "3",
         "name": "folder 3"
       },
       "children": []
     }
    ]

JavaScript或Angular中都没有内置函数来实现这一点

但是,这是一个可以通过递归非常容易地解决的问题:

function findById(id, items) {
  for (var i = 0; i < items.length; i++) {
    if (items[i].id === id) {
      return items[i];
    }

    var result = findById(id, items[i].children);
    if (result !== null) {
      return result; 
    }
  }
  return null;
}
函数findById(id,items){
对于(变量i=0;i
试试这个:

function isMatch(element, criteria) {
    var parent = null;
    if (typeof element.parent !== 'undefined') {
        parent = element.parent;
        if (typeof parent.id !== 'undefined') {
            return (parent.id === criteria);
        }
    }
    return false;
}

function findById (tree, criteria) {

    for (var i = 0; i < tree.length; i = i + 1) {
        var obj = tree[i];
        if (isMatch(obj, criteria)) {
            return obj;
        };

        if (typeof obj.children !== 'undefined') {
            var foundElement = findById(obj.children, criteria);
            if (foundElement != null) {
                return foundElement;
            }
        }
    }

    return null;
}
函数isMatch(元素、标准){
var parent=null;
if(typeof element.parent!=“未定义”){
parent=element.parent;
if(typeof parent.id!=“未定义”){
返回(parent.id==条件);
}
}
返回false;
}
函数findById(树,条件){
对于(变量i=0;i