# A beépített string, number, date és array segédek használata

> A Total.js bővíti a String, Number, Date és Array típusokat slugokhoz, hashekhez, formázáshoz, feldolgozáshoz, csoportosításhoz és kereséshez való segédekkel, és objektumokhoz kínálja a U.extend()-et és a U.clone()-t.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: hu
Content-SHA256: 43f47c62d203dd27b345800fac4c24215773632bcc28b6e2c6fb52313f36f12e
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

A Total.js metódusok egy készletét adja hozzá a JavaScript beépített típusaihoz. Az alkalmazás egészében elérhetők, ezért érdemes ismerni őket, mielőtt saját segédet írnál. Az alábbiakat a példa gyakorolja.

**String:** a `slug([max])` URL-barát szöveget készít (kisbetűk, ékezetek és szimbólumok nélkül); a `format(a, b)` a `{0}`, `{1}` helyére helyettesít; az `encode()` / `decode()` HTML-t escape-el és állít vissza; `padLeft(length, char)` / `padRight()`; a `parseInt2()` és a `parseFloat2()` számot olvas ki egy szövegből, és `0`-t ad, ha nincs benne; az `isEmail()`, `isURL()` és `isJSON()` validál; a `parseJSON()` JSON-t értelmez, hiba esetén `null`-t ad; az `md5()`, `sha1()` és `sha256()` hexadecimális hasheket ad vissza; a `capitalize()` minden szó első betűjét nagybetűssé teszi.

**Number:** `format(decimals, thousands, decimal)`, például a `(1234567.891).format(2)` eredménye `1 234 567.89`.

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

**Array:** `take(n)` és `skip(n)`, `first()` és `last()`, `trim()` (levágja a szövegeket és eltávolítja az üreseket), `findItem(field, value)` és `findIndex(field, value)`, `remove(value)` (minden egyezést eltávolít és a tömböt adja vissza), `group(field)` (`[{ name, items }]`-et ad vissza) és `quicksort(field)`.

**Objektumok:** a `U.extend(target, source)` a `source`-t a `target`-be olvasztja és visszaadja; a `U.clone(object)` mély másolatot készít.

```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]
	});
}
```
