dh_ackergaul
vor 3 Tagen 5bbf43c1b146439ab882815c12ed6292f1d7b4df
manufacturer/_furnview/_global/html/h/generic-katatree/js/helper.js
@@ -61,3 +61,52 @@
        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});
}