lik/ts/lik.objectmap.ts

133 lines
2.6 KiB
TypeScript
Raw Normal View History

import * as plugins from './lik.plugins'
2016-07-31 12:36:28 +00:00
export interface IObjectmapForEachFunction<T> {
2017-06-17 12:44:55 +00:00
(itemArg: T): void
}
export interface IObjectmapFindFunction<T> {
2017-06-17 12:44:55 +00:00
(itemArg: T): boolean
}
2016-07-31 12:36:28 +00:00
2016-07-30 22:54:46 +00:00
/**
* allows keeping track of objects
*/
export class Objectmap<T> {
2017-06-17 12:44:55 +00:00
private objectArray: T[] = []
/**
* returns a new instance
*/
constructor () {
// nothing here
}
/**
* add object to Objectmap
2017-07-05 12:29:08 +00:00
* returns false if the object is already in the map
* returns true if the object was added successfully
2017-06-17 12:44:55 +00:00
*/
2017-07-05 12:29:08 +00:00
add (objectArg: T): boolean {
if (this.checkForObject(objectArg)) {
// the object is already in the objectmap
return false
} else {
// the object is not yet in the objectmap
this.objectArray.push(objectArg)
return true
}
2017-06-17 12:44:55 +00:00
}
/**
* like .add but adds an whole array of objects
*/
addArray (objectArrayArg: T[]) {
for (let item of objectArrayArg) {
this.add(item)
}
2017-06-17 12:44:55 +00:00
}
/**
* check if object is in Objectmap
*/
checkForObject (objectArg: T) {
return this.objectArray.indexOf(objectArg) !== -1
}
/**
* find object
*/
find (findFunction: IObjectmapFindFunction<T>) {
let resultArray = this.objectArray.filter(findFunction)
if (resultArray.length > 0) {
return resultArray[ 0 ]
} else {
return null
}
2017-06-17 12:44:55 +00:00
}
/**
* finds a specific element and then removes it
*/
2017-06-18 11:13:12 +00:00
findOneAndRemove (findFunction: IObjectmapFindFunction<T>): T {
2017-06-17 12:44:55 +00:00
let foundElement = this.find(findFunction)
if (foundElement) {
this.remove(foundElement)
2016-07-30 22:54:46 +00:00
}
2017-06-17 12:44:55 +00:00
return foundElement
}
/**
* run function for each item in Objectmap
*/
async forEach (functionArg: IObjectmapForEachFunction<T>) {
for (let object of this.objectArray) {
await functionArg(object)
}
2017-06-17 12:44:55 +00:00
}
/**
* gets an object in the Observablemap and removes it, so it can't be retrieved again
*/
getOneAndRemove (): T {
return this.objectArray.shift()
}
/**
* returns a cloned array of all the objects currently in the Objectmap
*/
getArray () {
return plugins.lodash.cloneDeep(this.objectArray)
}
/**
* check if Objectmap ist empty
*/
isEmpty (): boolean {
if (this.objectArray.length === 0) {
return true
} else {
return false
2016-09-29 20:05:20 +00:00
}
2017-06-17 12:44:55 +00:00
}
/**
* remove object from Objectmap
*/
remove (objectArg: T) {
let replacementArray = []
for (let item of this.objectArray) {
if (item !== objectArg) {
replacementArray.push(item)
}
}
2017-06-17 12:44:55 +00:00
this.objectArray = replacementArray
}
/**
* wipe Objectmap
*/
wipe () {
this.objectArray = []
}
}