# Die eingebauten Helfer für String, Number, Date und Array nutzen

> Total.js erweitert String, Number, Date und Array um Helfer für Slugs, Hashes, Formatierung, Parsing, Gruppierung und Suche und bietet U.extend() und U.clone() für Objekte.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: de
Content-SHA256: 8ad60b799e9bb711f490ee4f67db3b8f2d458787cd09d013351a05b62f508c33
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Total.js fügt den eingebauten Typen von JavaScript eine Reihe von Methoden hinzu. Sie sind überall in der Anwendung verfügbar, es lohnt sich also, sie zu kennen, bevor du einen eigenen Helfer schreibst. Die unten genannten werden vom Beispiel ausgeführt.

**String:** `slug([max])` erzeugt einen URL-tauglichen Text (Kleinbuchstaben, keine Akzente oder Symbole); `format(a, b)` ersetzt `{0}`, `{1}`; `encode()` / `decode()` maskieren und stellen HTML wieder her; `padLeft(length, char)` / `padRight()`; `parseInt2()` und `parseFloat2()` lesen eine Zahl aus einem Text und geben `0` zurück, wenn keine vorhanden ist; `isEmail()`, `isURL()` und `isJSON()` validieren; `parseJSON()` parst JSON und gibt bei einem Fehler `null` zurück; `md5()`, `sha1()` und `sha256()` geben Hex-Hashes zurück; `capitalize()` schreibt den ersten Buchstaben jedes Wortes groß.

**Number:** `format(decimals, thousands, decimal)`, zum Beispiel ergibt `(1234567.891).format(2)` den Wert `1 234 567.89`.

**Date:** `format('yyyy-MM-dd HH:mm')`, `add('1 day')` und `diff(date, 'days')`.

**Array:** `take(n)` und `skip(n)`, `first()` und `last()`, `trim()` (kürzt die Texte und entfernt die leeren), `findItem(field, value)` und `findIndex(field, value)`, `remove(value)` (entfernt jeden Treffer und gibt das Array zurück), `group(field)` (gibt `[{ name, items }]` zurück) und `quicksort(field)`.

**Objekte:** `U.extend(target, source)` führt `source` in `target` zusammen und gibt es zurück; `U.clone(object)` erstellt eine tiefe Kopie.

```js controllers/utilities.js
exports.install = function() {
	ROUTE('GET /utils/', utils);
};

function utils($) {

	var items = [{ type: 'a', n: 1 }, { type: 'b', n: 2 }, { type: 'a', n: 3 }];
	var original = { a: { b: 1 } };
	var copy = U.clone(original);
	copy.a.b = 2;

	$.json({
		slug: 'Hello Wörld & Co!'.slug(),
		slugmax: 'Hello brave new world'.slug(11),
		format: '{0} has {1} items'.format('Ann', 3),
		encode: '<a href="x">&</a>'.encode(),
		decode: '&lt;b&gt;'.decode(),
		pad: ['7'.padLeft(3, '0'), '7'.padRight(3, '0')],
		numbers: ['abc12x'.parseInt2(), '3,5kg'.parseFloat2(), 'none'.parseInt2()],
		is: ['a@b.cz'.isEmail(), 'nope'.isEmail(), 'https://totaljs.com'.isURL(), '{"a":1}'.isJSON(), 'abc'.isJSON()],
		json: ['{"a":1}'.parseJSON(), 'not json'.parseJSON()],
		md5: 'abc'.md5(),
		sha1: 'abc'.sha1(),
		capitalize: 'hello big world'.capitalize(),
		number: [(1234567.891).format(2), (1234567.891).format(2, ' ', ',')],
		date: [new Date(2026, 0, 5, 9, 7).format('yyyy-MM-dd HH:mm'), new Date(2026, 0, 31).add('1 day').format('yyyy-MM-dd'), new Date(2026, 0, 5).diff(new Date(2026, 0, 1), 'days')],
		take: [[1, 2, 3, 4, 5].take(2), [1, 2, 3, 4, 5].skip(3), [1, 2, 3].first(), [1, 2, 3].last()],
		trim: ['a', '', ' b '].trim(),
		find: [[{ id: 1 }, { id: 2 }].findItem('id', 2), [{ id: 1 }, { id: 2 }].findIndex('id', 2)],
		remove: [1, 2, 3, 2].remove(2),
		group: items.group('type'),
		sort: [{ n: 'b' }, { n: 'a' }].quicksort('n'),
		extend: U.extend({ a: 1 }, { b: 2 }),
		clone: [original.a.b, copy.a.b]
	});
}
```
