Usage:
const array = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
const collection = new FindAndRemoveCollection(array)
collection.findAndRemove(item => item === 'Tuesday') // Returns 'Tuesday'
// collection now has ['Monday', 'Wednesday', 'Thursday', 'Friday']
collection.findAndRemove(item => item === 'Tuesday') // Returns undefined
If you don't want to create a new class, you can always use it inline or anonymously:
const array = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
const collection = new (class FindAndPopCollection<T> {
private _array: T[];
constructor(_array: T[]) {
this._array = _array.slice();
}
findAndRemove(predicate: (value: T) => boolean) {
const index = this._array.findIndex(predicate);
if (index !== -1) {
const value = this._array[index];
this._array.splice(index, 1);
return value;
}
}
})(array);