# Folosește helperele încorporate pentru string, number, date și array

> Total.js extinde String, Number, Date și Array cu helpere pentru slug-uri, hash-uri, formatare, parsare, grupare și căutare și oferă U.extend() și U.clone() pentru obiecte.

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

Total.js adaugă un set de metode tipurilor încorporate din JavaScript. Sunt disponibile peste tot în aplicație, deci merită cunoscute înainte să scrii un helper propriu. Cele de mai jos sunt exersate de exemplu.

**String:** `slug([max])` creează un text potrivit pentru URL (litere mici, fără accente sau simboluri); `format(a, b)` înlocuiește `{0}`, `{1}`; `encode()` / `decode()` fac escape și restaurează HTML; `padLeft(length, char)` / `padRight()`; `parseInt2()` și `parseFloat2()` citesc un număr dintr-un text și returnează `0` dacă nu există; `isEmail()`, `isURL()` și `isJSON()` validează; `parseJSON()` interpretează JSON și returnează `null` la eroare; `md5()`, `sha1()` și `sha256()` returnează hash-uri hexazecimale; `capitalize()` pune cu majusculă prima literă a fiecărui cuvânt.

**Number:** `format(decimals, thousands, decimal)`, de exemplu `(1234567.891).format(2)` dă `1 234 567.89`.

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

**Array:** `take(n)` și `skip(n)`, `first()` și `last()`, `trim()` (taie textele și elimină golurile), `findItem(field, value)` și `findIndex(field, value)`, `remove(value)` (elimină fiecare potrivire și returnează array-ul), `group(field)` (returnează `[{ name, items }]`) și `quicksort(field)`.

**Obiecte:** `U.extend(target, source)` îmbină `source` în `target` și îl returnează; `U.clone(object)` face o copie profundă.

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