Сообщение от monolithed
|
Да нет, слежу с первой версии... просто пока не могу понять где бы эта либа была полезна
|
Ты не мог следить с первой версии, т.к. первая публикация была с 3-й
Эта либа общего назначения, т.е. использовать её можно везде, все мои проекты (кроме Snakeskin, т.к. только в 5-й версии был добавлен механизм "контекста forEach") используют Collection. Одно "но", чтобы писать на Collection нужно любить функциональщину, т.е. не шарахаться от map / reduce и прочего, т.к. либа явно декларирует именно такой подход.
Пример, функция которая преобразовывает dash-style в camelCase
String.prototype.convertDashStyleToCamelCase = function () {
return $C(this).reduce(function (res, el) {
if (el !== '-') {
res += this.$.up ? el.toUpperCase() : el;
}
this.$.up = el === '-';
return res;
}, '');
};
Обратная операция
String.prototype.convertCamelCaseToDashStyle = function () {
return $C(this).reduce(function (res, el) {
var lc = el.toLowerCase();
return res + (el !== lc ? '-' : '') + lc;
}, '');
};
Отбор элементов для пагинации
$C(...).forEach(function (el) {
...
}, {startIndex: 10, count: 10});
Тоже самое, но в обратном порядке
$C(...).forEach(function (el) {
...
}, {startIndex: 10, count: 10, reverse: true});
Количество вхождений каждого символа в строке
$C('fooobar1212').group(el => el)
Количество вхождений буквы 'o' в строке
$C('fooobar1212').length(el => el == 'o')
Преобразовать объект {ключ: значение} в Set из значений, которые больше 1
$C({a: 1, b: 2, c: 3}).map(el => el, {initial: new Set, filter: el => el > 1})
При этом не важно, что мы итерируем, хоть массив, объект, Map, Set, генератор, строку и т.д. все методы работают одинаково и со скоростью циклов, но в сахарном функциональном виде.
Примеров можно сделать уйму, но достаточно взглянуть на методы:
https://github.com/kobezzza/Collection/wiki