lodash property search in array and in nested child arrays

后端 未结 3 1109
小蘑菇
小蘑菇 2020-12-10 02:31

I have this array:

[
    {
        id: 1,
        name: \'test 1\',
        children: []
    },
    {
        id: 2,
        name: \'test 2\',
        childr         


        
3条回答
  •  执笔经年
    2020-12-10 03:09

    That's a very simple tree traversal task. The easiest way to solve it is recursion (link to jsbin). It will work with any depth (with recursion limit of course) and it's one of the fastest ways with the worst complexity O(n):

    function find(id, items) {
      var i = 0, found;
    
      for (; i < items.length; i++) {
        if (items[i].id === id) {
          return items[i];
        } else if (_.isArray(items[i].children)) {
          found = find(id, items[i].children);
          if (found) {
            return found;
          }
        }
      }
    }
    

    Update:

    To find all matches - a slightly modified function (jsbin link above is updated):

    function findAll(id, items) {
      var i = 0, found, result = [];
    
      for (; i < items.length; i++) {
        if (items[i].id === id) {
          result.push(items[i]);
        } else if (_.isArray(items[i].children)) {
          found = findAll(id, items[i].children);
          if (found.length) {
            result = result.concat(found);
          }
        }
      }
    
      return result;
    }
    

提交回复
热议问题