From cdf7cc143a6a90f0c6a31dfc456428a297311b83 Mon Sep 17 00:00:00 2001 From: Hans Acker <> Date: Thu, 9 Jan 2025 22:04:19 +0100 Subject: [PATCH] use copyWithin instead of loop --- html/js/statsbox.js | 6 ++---- html/js/statsbox.min.js | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/html/js/statsbox.js b/html/js/statsbox.js index 87c7ca8..d253167 100644 --- a/html/js/statsbox.js +++ b/html/js/statsbox.js @@ -96,11 +96,9 @@ class SortedStatsBox extends StatsBox { this._rows[idxNew].tr.before(stat.tr); // move table row // shift array back by one - while (idxOld > idxNew) { - this._rows[idxOld] = this._rows[idxOld-1]; - idxOld--; - } + this._rows.copyWithin(idxNew+1, idxNew, idxOld); + // re-insert element this._rows[idxNew] = stat; //console.log(`${key}: ${this._stats[key]} => ${idxNew}`); diff --git a/html/js/statsbox.min.js b/html/js/statsbox.min.js index d53bb60..b2165ad 100644 --- a/html/js/statsbox.min.js +++ b/html/js/statsbox.min.js @@ -1 +1 @@ -class h{#t;key;#i;tr;constructor(t,s){const i=document.createElement("td");i.textContent=t;const h=document.createElement("td");this.#i=h;const e=document.createElement("tr");e.append(i,h);this.tr=e;this.key=t;this.value=s}set value(t){this.#i.textContent=this.#t=t}get value(){return this.#t}}class t{#h;o={};l=[];constructor(t,s={}){t.replaceChildren();this.#h=t;for(const i in s){this.set(i,s[i])}}has(t){return t in this.o}set(t,s){if(this.has(t)){this.l[this.o[t]].value=s}else{const i=new h(t,s);this.#h.append(i.tr);this.o[t]=this.l.length;this.l.push(i)}}inc(t){if(this.has(t)){this.l[this.o[t]].value++}else{this.set(t,1)}}}class s extends t{inc(i){if(this.has(i)){let t=this.o[i];const h=this.l[t];h.value++;const e=h.value;let s=t;while(s>0&&e>this.l[s-1].value){this.o[this.l[s-1].key]=s--}if(s!=t){this.l[s].tr.before(h.tr);while(t>s){this.l[t]=this.l[t-1];t--}this.l[s]=h;this.o[i]=s}}else{this.set(i,1)}}}export{t as StatsBox,s as SortedStatsBox}; +class h{#t;key;#i;tr;constructor(t,s){const i=document.createElement("td");i.textContent=t;const h=document.createElement("td");this.#i=h;const e=document.createElement("tr");e.append(i,h);this.tr=e;this.key=t;this.value=s}set value(t){this.#i.textContent=this.#t=t}get value(){return this.#t}}class t{#h;o={};l=[];constructor(t,s={}){t.replaceChildren();this.#h=t;for(const i in s){this.set(i,s[i])}}has(t){return t in this.o}set(t,s){if(this.has(t)){this.l[this.o[t]].value=s}else{const i=new h(t,s);this.#h.append(i.tr);this.o[t]=this.l.length;this.l.push(i)}}inc(t){if(this.has(t)){this.l[this.o[t]].value++}else{this.set(t,1)}}}class s extends t{inc(i){if(this.has(i)){let t=this.o[i];const h=this.l[t];h.value++;const e=h.value;let s=t;while(s>0&&e>this.l[s-1].value){this.o[this.l[s-1].key]=s--}if(s!=t){this.l[s].tr.before(h.tr);this.l.copyWithin(s+1,s,t);this.l[s]=h;this.o[i]=s}}else{this.set(i,1)}}}export{t as StatsBox,s as SortedStatsBox};