code: func (o *ObjectList) Filter(keys ...string) *ObjectList {
  	var result ObjectList
  	for _, item := range o.Items {
  		// If there aren't enough keys, then ignore this
  		if len(item.Keys) < len(keys) {
  			continue
  		}
  
  		match := true
  		for i, key := range item.Keys[:len(keys)] {
  			key := key.Token.Value().(string)
  			if key != keys[i] && !strings.EqualFold(key, keys[i]) {
  				match = false
  				break
  			}
  		}
  		if !match {
  			continue
  		}
  
  		// Strip off the prefix from the children
  		newItem := *item
  		newItem.Keys = newItem.Keys[len(keys):]
  		result.Add(&newItem)
  	}
  
  	return &result
  }
docs: // Filter filters out the objects with the given key list as a prefix.
  //
  // The returned list of objects contain ObjectItems where the keys have
  // this prefix already stripped off. This might result in objects with
  // zero-length key lists if they have no children.
  //
  // If no matches are found, an empty ObjectList (non-nil) is returned.