# De ingebouwde helpers voor string, number, date en array gebruiken

> Total.js breidt String, Number, Date en Array uit met helpers voor slugs, hashes, opmaak, parsen, groeperen en zoeken en biedt U.extend() en U.clone() voor objecten.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: nl
Content-SHA256: 95429125e2052f4a1728aa5f456e1cb6c009f6564674b338199c202ee222cb09
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Total.js voegt een reeks methoden toe aan de ingebouwde typen van JavaScript. Ze zijn overal in de applicatie beschikbaar, het loont dus om ze te kennen voordat je een eigen helper schrijft. De onderstaande worden door het voorbeeld uitgeoefend.

**String:** `slug([max])` maakt een URL-veilige tekst (kleine letters, zonder accenten of symbolen); `format(a, b)` vervangt `{0}`, `{1}`; `encode()` / `decode()` escapen en herstellen HTML; `padLeft(length, char)` / `padRight()`; `parseInt2()` en `parseFloat2()` lezen een getal uit een tekst en geven `0` terug als er geen is; `isEmail()`, `isURL()` en `isJSON()` valideren; `parseJSON()` parset JSON en geeft bij een fout `null` terug; `md5()`, `sha1()` en `sha256()` geven hex-hashes terug; `capitalize()` zet de eerste letter van elk woord in hoofdletters.

**Number:** `format(decimals, thousands, decimal)`, bijvoorbeeld `(1234567.891).format(2)` geeft `1 234 567.89`.

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

**Array:** `take(n)` en `skip(n)`, `first()` en `last()`, `trim()` (trimt de teksten en verwijdert de lege), `findItem(field, value)` en `findIndex(field, value)`, `remove(value)` (verwijdert elke overeenkomst en geeft de array terug), `group(field)` (geeft `[{ name, items }]` terug) en `quicksort(field)`.

**Objecten:** `U.extend(target, source)` voegt `source` samen met `target` en geeft het terug; `U.clone(object)` maakt een diepe 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]
	});
}
```
