Mat
Aktives Mitglied
Moin,
ich hab eine Hilfsfunktion für die gleichmäßig verteilte Darstellung von Elementen in Arrays. Im Moment habe ich nur 2 Parameter: Padding-Größe und auszugebender Array. Die Padding-Größe ist optional, aber muss übergeben werden, weil man Methoden natürlich nicht überladen kann.
Ich wollte noch weitere optionale Parameter einbauen, aber dann wird die Funktion zu unhandlich. Optionale Parameter an das Ende hängen ist auch problematisch, wenn vorher ein Array oder
Wie mache ich das am besten? Für die hier gezeigte Funktion ist es nicht so wichtig, aber allgemein hätte ich gerne Autovervollständigung beim Objekt, damit es leichter konstruiert werden kann. Und ich möchte auch nicht alle Attribute jedes Mal auf null oder undefined prüfen müssen. Soll ich eine Klasse schreiben, die Felder und Getter anbietet? Oder eine Art generische Factory/Builder-Funktion?
Code
Beispiele
ich hab eine Hilfsfunktion für die gleichmäßig verteilte Darstellung von Elementen in Arrays. Im Moment habe ich nur 2 Parameter: Padding-Größe und auszugebender Array. Die Padding-Größe ist optional, aber muss übergeben werden, weil man Methoden natürlich nicht überladen kann.
Ich wollte noch weitere optionale Parameter einbauen, aber dann wird die Funktion zu unhandlich. Optionale Parameter an das Ende hängen ist auch problematisch, wenn vorher ein Array oder
...Rest
-Parameter kommt. Deswegen dachte ich an ein Config-Objekt als 1. Parameter.Wie mache ich das am besten? Für die hier gezeigte Funktion ist es nicht so wichtig, aber allgemein hätte ich gerne Autovervollständigung beim Objekt, damit es leichter konstruiert werden kann. Und ich möchte auch nicht alle Attribute jedes Mal auf null oder undefined prüfen müssen. Soll ich eine Klasse schreiben, die Felder und Getter anbietet? Oder eine Art generische Factory/Builder-Funktion?
Code
Javascript:
'use strict';
export default class DTHelper {
/**
* @example f(null, [5,3,12]) => [ 5, 3, 12 ]
* @example f(2, [1,2,3]) => [ 1, 2, 3 ]
* @param padding {null|Number}
* @param elements {Array}
* @return String
*/
static asPrettyString(padding, elements) {
let prettyArray = Array.from(elements);
const maxLen = Math.max(
padding,
Math.max.apply(
null,
elements.map((elem) => this.#getElemLength(elem))
)
);
prettyArray = prettyArray.map((elem) => {
const elemLength = this.#getElemLength(elem);
let prettyElement;
if (elemLength === 0) {
prettyElement = `${String.prototype.padStart(maxLen)} `;
} else {
prettyElement = `${String.prototype.padStart(maxLen - elemLength + 1)}${elem}`;
}
return prettyElement;
});
return `[ ${prettyArray.join()}${String.prototype.padStart(maxLen)} ]`;
}
static #getElemLength(elem) {
return elem !== undefined && elem !== null ? elem.toString().length : 0;
}
}
Beispiele
Javascript:
function beispiele() {
let nums = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let testValues = [3, 9, 12, null, 5, 18, 99, 7, -12];
/* Beispiel mit padding = null
[ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
padding auto: [ 3, 9, 12, , 5, 18, 99, 7, -12 ]
*/
console.log(`${''.padEnd(16)}${DTHelper.asPrettyString(3, nums)}`);
console.log(`${'padding auto:'.padEnd(16)}${DTHelper.asPrettyString(null, testValues)}\n`);
/* Beispiel mit zu kleinem Wert
[ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
padding 2: [ 3, 9, 12, , 5, 18, 99, 7, -12 ]
*/
console.log(`${''.padEnd(16)}${DTHelper.asPrettyString(3, nums)}`);
console.log(`${'padding 2:'.padEnd(16)}${DTHelper.asPrettyString(2, testValues)}\n`);
/* Beispiel mit optimalem Wert
[ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
padding 3: [ 3, 9, 12, , 5, 18, 99, 7, -12 ]
*/
console.log(`${''.padEnd(16)}${DTHelper.asPrettyString(3, nums)}`);
console.log(`${'padding 3:'.padEnd(16)}${DTHelper.asPrettyString(3, testValues)}\n`);
/* Beispiel mit größerem Wert
[ 0, 1, 2, 3, 4, 5, 6, 7, 8 ]
padding 4: [ 3, 9, 12, , 5, 18, 99, 7, -12 ]
*/
console.log(`${''.padEnd(16)}${DTHelper.asPrettyString(4, nums)}`);
console.log(`${'padding 4:'.padEnd(16)}${DTHelper.asPrettyString(4, testValues)}\n`);
}
Zuletzt bearbeitet: