docs: function _getValue(fromObject, key, keys) {
    var regArray = /(\[\]|\[(.*)\])$/g
      , match
      , arrayIndex
      , isValueArray = false
      , result
      ;
  
    if (!fromObject) {
      return;
    }
  
    match = regArray.exec(key);
    if (match) {
      key = key.replace(regArray, '');
      isValueArray = (key !== '');
      arrayIndex = match[2];
    }
  
    if (keys.length === 0) {
      if (isValueArray) {
        if (typeof arrayIndex === 'undefined' || fromObject[key] === undefined) {
          result = fromObject[key];
        } else {
          result = fromObject[key][arrayIndex];
        }
      } else if (Array.isArray(fromObject)) {
        if (key === '') {
          if (typeof arrayIndex === 'undefined') {
            result = fromObject;
          } else {
            result = fromObject[arrayIndex];
          }
        } else {
          result = fromObject.map(function (item) {
            return item[key];
          })
        }
      } else {
        result = fromObject[key];
      }
    } else {
      if (isValueArray) {
        if (Array.isArray(fromObject[key])) {
          if (typeof arrayIndex === 'undefined') {
            result = fromObject[key].map(function (item) {
              return _getValue(item, keys[0], keys.slice(1));
            });
          } else {
            result = _getValue(fromObject[key][arrayIndex], keys[0], keys.slice(1));
          }
        } else {
          if (typeof arrayIndex === 'undefined') {
            result = _getValue(fromObject[key], keys[0], keys.slice(1));
          } else {
            if (fromObject[key] === undefined) {
              return;
            }
            result = _getValue(fromObject[key][arrayIndex], keys[0], keys.slice(1));
          }
        }
      } else if (Array.isArray(fromObject)) {
        if (key === '') {
          if (typeof arrayIndex === 'undefined') {
            result = _getValue(fromObject, keys[0], keys.slice(1));
          } else {
            result = _getValue(fromObject[arrayIndex], keys[0], keys.slice(1));
          }
        } else {
          result = fromObject.map(function (item) {
            result = _getValue(item, keys[0], keys.slice(1));
          })
        }
        if (typeof arrayIndex === 'undefined') {
          result = fromObject.map(function (item) {
            return _getValue(item, keys[0], keys.slice(1));
          });
        } else {
  
          result = _getValue(fromObject[arrayIndex], keys[0], keys.slice(1));
        }
      } else {
        result = _getValue(fromObject[key], keys[0], keys.slice(1));
      }
    }
  
    return result;
  }