The `"list"` module provides base building blocks for composing lists.
@class
Base trait that can be used to compose traits with non-standard
enumeration behaviors.
This trait is supposed to be used as part of a composition, since it only
provides custom enumeration behavior to a composed object.
It defines one required `_keyValueMap` property, that is used as a hash of
"key-values" to iterate on during enumeration.
@constructor
Constructs an `Iterable` object.
@property {Object}
Hash map of key-values to iterate over. _Required_ property: that is, the
property must be supplied by objects that compose this trait.
_Note: That this property can be a getter if you need dynamic behavior._
@class
An ordered collection (also known as a sequence) disallowing duplicate
elements. List is composed out of `Iterable`, therefore it provides custom
enumeration behavior that is similar to array (enumerates only on the
elements of the list).
List is a base trait and is meant to be part of a
composition, since all of its API is private except for the `length` property.
**Examples:**
var MyList = List.compose({
add: function add(item1, item2, /*item3...*/) {
Array.slice(arguments).forEach(this._add.bind(this));
},
remove: function remove(item1, item2, /*item3...*/) {
Array.slice(arguments).forEach(this._remove.bind(this));
}
});
MyList('foo', 'bar', 'baz').length == 3; // true
new MyList('new', 'keyword').length == 2; // true
MyList.apply(null, [1, 2, 3]).length == 3; // true
let list = MyList();
list.length == 0; // true
list.add(1, 2, 3) == 3; // true
@constructor
Constructor can takes any number of elements and creates an instance of
`List` populated with the specified elements.
@param [element1] {Object|String|Number}
@param [element2] {Object|String|Number}
@param [...] {Object|String|Number}
@property {Number}
Number of elements in this list.
@method
@param element {Object|Number|String}
Returns `true` if this list contains the specified `element`.
@method
@param element {Object|Number|String}
Appends the specified `element` to the end of this list, if it doesn't
contain it.
_Ignores the call if `element` is already contained._
@method
@param element {Object|Number|String}
Removes specified `element` from this list, if it contains it.
_Ignores the call if `element` is not contained._
@method
Removes all of the elements from this list.