# Class: Collection

This documentation is for OpenLayers v10.9.0. The latest is v.

## ol/Collection~Collection

    import Collection from 'ol/Collection.js';

An expanded version of standard JS Array, adding convenience methods for manipulation. Add and remove changes to the Collection trigger a Collection event. Note that this does not cover changes to the objects within the Collection; they trigger events on the appropriate object, not on the Collection as a whole.

#### new Collection(array, options)

Collection.js, line 76

  Name | Type | Description
  --- | --- | ---
  `array` | Array.<T> | undefined | Array.
  `options` | Collection options.
  Name | Type | Description
  --- | --- | ---
  `unique` | boolean (defaults to false) | Disallow the same item from being added to the collection twice.

  ##### Fires:

  - `add` (CollectionEvent) - Triggered when an item is added to the collection.
  - `change` (BaseEvent) - Generic change event. Triggered when the revision counter is increased.
  - `change:length` (ObjectEvent)
  - `error` (BaseEvent) - Generic error event. Triggered when an error occurs.
  - `propertychange` (ObjectEvent) - Triggered when a property is changed.
  - `remove` (CollectionEvent) - Triggered when an item is removed from the collection.

### Extends

- BaseObject

### Observable Properties

Name | Type | Settable | ObjectEvent type | Description
--- | --- | --- | --- | ---
`length` | number | no | `change:length` | The length of the array.

### Methods

#### changed() inherited

Observable.js, line 68

  Increases the revision counter and dispatches a 'change' event.

#### clear()

Collection.js, line 126

  Remove all elements from the collection.

#### dispatchEvent(event){boolean | undefined} inherited

events/Target.js, line 85

  Dispatches an event and calls all listeners listening for events of this type. The event parameter can either be a string or an Object with a `type` property.

  Name | Type | Description
  --- | --- | ---
  `event` | BaseEvent | string | Event object.

  ##### Returns:

  `false` if anyone called preventDefault on the event object or if any of the listeners returned false.

#### extend(arr){Collection<T>}

Collection.js, line 139

  Add elements to the collection. This pushes each item in the provided array to the end of the collection.

  Name | Type | Description
  --- | --- | ---
  `arr` | Array.<T> | Array.

  ##### Returns:

  This collection.

#### forEach(f)

Collection.js, line 153

  Iterate over each element, calling the provided callback.

  Name | Type | Description
  --- | --- | ---
  `f` | function | The function to call for every element. This function takes 3 arguments (the element, the index and the array). The return value is ignored.

#### get(key){*} inherited

Object.js, line 136

  Gets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.

  ##### Returns:

  Value.

#### getArray(){Array.<T>}

Collection.js, line 168

  Get a reference to the underlying Array object. Warning: if the array is mutated, no events will be dispatched by the collection, and the collection's "length" property won't be in sync with the actual length of the array.

  ##### Returns:

  Array.

#### getKeys(){Array.<string>} inherited

Object.js, line 149

  Get a list of object property names.

  ##### Returns:

  List of property names.

#### getLength(){number}

Collection.js, line 188

  Get the length of this collection.

  ##### Returns:

  The length of the array.

#### getProperties(){NoInfer.<Properties>} inherited

Object.js, line 158

  Get an object of all property names and values.

  ##### Returns:

  Object.

#### getRevision(){number} inherited

Observable.js, line 79

  Get the version number for this object. Each time the object is modified, its version number will be incremented.

  ##### Returns:

  Revision.

#### insertAt(index, elem)

Collection.js, line 198

  Insert an element at the provided index.

  Name | Type | Description
  --- | --- | ---
  `index` | number | Index.
  `elem` | T | Element.

#### item(index){T}

Collection.js, line 178

  Get the element at the provided index.

  Name | Type | Description
  --- | --- | ---
  `index` | number | Index.

  ##### Returns:

  Element.

#### on(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 152

  Listen for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### once(type, listener){EventsKey | Array<EventsKey>} inherited

Observable.js, line 164

  Listen once for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

  ##### Returns:

  Unique key for the listener. If called with an array of event types as the first argument, the return will be an array of keys.

#### pop(){T | undefined}

Collection.js, line 218

  Remove the last element of the collection and return it. Return `undefined` if the collection is empty.

  ##### Returns:

  Element.

#### push(elem){number}

Collection.js, line 228

  Insert the provided element at the end of the collection.

  Name | Type | Description
  --- | --- | ---
  `elem` | T | Element.

  ##### Returns:

  New length of the collection.

#### remove(elem){T | undefined}

Collection.js, line 240

  Remove the first occurrence of an element from the collection.

  Name | Type | Description
  --- | --- | ---
  `elem` | T | Element.

  ##### Returns:

  The removed element or undefined if none found.

#### removeAt(index){T | undefined}

Collection.js, line 257

  Remove the element at the provided index and return it. Return `undefined` if the collection does not contain this index.

  Name | Type | Description
  --- | --- | ---
  `index` | number | Index.

  ##### Returns:

  Value.

#### set(key, value, silent) inherited

Object.js, line 218

  Sets a value.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `value` | * | Value.
  `silent` | boolean | undefined | Update without triggering an event.

#### setAt(index, elem)

Collection.js, line 278

  Set the element at the provided index.

  Name | Type | Description
  --- | --- | ---
  `index` | number | Index.
  `elem` | T | Element.

#### setProperties(values, silent) inherited

Object.js, line 238

  Sets a collection of key-value pairs. Note that this changes any existing properties and adds new ones (it does not remove any existing properties).

  Name | Type | Description
  --- | --- | ---
  `values` | Partial.<NoInfer.<Properties>> | Values.
  `silent` | boolean | undefined | Update without triggering an event.

#### un(type, listener) inherited

Observable.js, line 173

  Unlisten for a certain type of event.

  Name | Type | Description
  --- | --- | ---
  `type` | string | Array.<string> | The event type or array of event types.
  `listener` | function | The listener function.

#### unset(key, silent) inherited

Object.js, line 262

  Unsets a property.

  Name | Type | Description
  --- | --- | ---
  `key` | string | Key name.
  `silent` | boolean | undefined | Unset without triggering an event.