code: function fnInitFilter(treeData, filters, options, keyChild) {
                  if (!angular.isArray(treeData)
                      || treeData.length === 0) {
                      return treeData;
                  }
  
                  var _i, _len,
                      _filter;
  
                  _filter = _fnConvert(filters);
                  if (!(angular.isArray(_filter) || angular.isObject(_filter))
                      || _filter.length === 0) {
                      for (_i = 0, _len = treeData.length; _i < _len; _i++) {
                          for_all_descendants(
                              options,
                              treeData[_i],
                              keyChild || '__children__',
                              _fnBeforeClear, _fnAfter
                          );
                      }
  
                      return treeData;
                  }
  
                  options.filter       = _filter;
                  options.filter_index = 0;
                  for (_i = 0, _len = treeData.length; _i < _len; _i++) {
                      for_all_descendants(
                          options,
                          treeData[_i],
                          keyChild || '__children__',
                          _fnBefore, _fnAfter
                      );
                  }
  
                  return treeData;
              }
docs: `fnInitFilter` function is constructor of service `$TreeDnDFilter`.
  @constructor
  @param {object|array} treeData
  @param {object|array} filters
  @param {object} options
  @param {string} keyChild
  @returns {array} Return `treeData` or `treeData` with `filter`
  @private