【问题标题】:I'm receiving an array of object in the API response and is nested array. i want find a object by ID我在 API 响应中接收到一个对象数组,并且是嵌套数组。我想通过 ID 查找对象
【发布时间】:2015-10-21 06:52:53
【问题描述】:

嗨,这是从 API 响应接收的对象数组,我正在使用 angular.js 和 javascript,我想通过 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 arrays angularjs


    【解决方案1】:

    试试这个:

    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;
    }
    

    【讨论】:

      【解决方案2】:

      在 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;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-03
        • 1970-01-01
        • 2022-11-10
        相关资源
        最近更新 更多