| | |
| | | console.log("----------------------------------------------------------------");
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * Baut (memoisiert) eine Lookup-Map "Schluesselwert -> erstes passendes Element"
|
| | | * fuer ein Array auf. Damit lassen sich wiederholte lineare Array.find()-Scans
|
| | | * (jeweils O(n)) durch O(1)-Zugriffe ersetzen -- entscheidend, wenn die gleiche
|
| | | * Liste fuer sehr viele Artikel durchsucht wird (sonst O(Artikel * Listengroesse)).
|
| | | *
|
| | | * Die fertige Map wird am Array-Objekt zwischengespeichert (Property
|
| | | * "__kataIdx_<prop>") und automatisch verworfen, sobald das Array neu zugewiesen
|
| | | * wird (z.B. bei Hersteller-/Sprachwechsel oder neuem KataPage-Aufbau), da das
|
| | | * neue Array-Objekt diese Property nicht besitzt.
|
| | | *
|
| | | * Schluessel werden mit "$" praefixiert, um Kollisionen mit Eigenschaften des
|
| | | * Object-Prototyps (z.B. "constructor", "toString") auszuschliessen.
|
| | | *
|
| | | * IE7-kompatibel: nur for-Schleife und einfache Property-Zugriffe.
|
| | | *
|
| | | * @param {Array} arr Quell-Array (darf null/undefined/leer sein)
|
| | | * @param {string} prop Eigenschaft, nach der indiziert wird
|
| | | * @returns {Object} Map ("$"+Wert -> Element); erstes Vorkommen gewinnt (wie find())
|
| | | */
|
| | | function buildIndexMap(arr, prop) {
|
| | | if (!arr) {
|
| | | return {};
|
| | | }
|
| | | var cacheKey = "__kataIdx_" + prop;
|
| | | var idx = arr[cacheKey];
|
| | | if (idx) {
|
| | | return idx;
|
| | | }
|
| | | idx = {};
|
| | | for (var i = 0; i < arr.length; i++) {
|
| | | var item = arr[i];
|
| | | if (item) {
|
| | | var k = "$" + item[prop];
|
| | | if (idx[k] === undefined) {
|
| | | idx[k] = item; // erstes Vorkommen behalten -> identisch zu Array.find()
|
| | | }
|
| | | }
|
| | | }
|
| | | arr[cacheKey] = idx;
|
| | | return idx;
|
| | | }
|
| | | genKataTreeTimeLine = [];
|
| | | startDate = Date.now();
|
| | |
|
| | | function timeline(date, text){
|
| | | genKataTreeTimeLine.push({date: date - startDate, text: text});
|
| | | }
|