Реализация некоторых полезных функций из Groovy на Javascript
Установка
bower install groovy.utils
Все функции имеют два первых необязательных аргумента. Если:
- передано два аргумента, то это
colletion
иhandler
, в качестве контекста используется контекст функции. - передан один аргумент, то это
handler
. Коллекция берется из контекста функции и она же используется как контекст.
Таким образом можно привязать коллекцию к функции в виде контекста
var myCollectionEach = each.bind([1, 2, 3]);
myCollectionEach(function(value, key, index){ /* ... */ });
В документации под коллекцией подразумевается Array
, Object
, FileList
, HTMLCollection
, jQuery
или NodeList
. С этими объектами функции работают правильно. Список будет дополняться.
Collection each([collection, context], handler)
Вызывает принятый обработчик в заданном или глобальном контексте, для каждого элемента коллекции и возвращает исходный объект
each([1,2,3], console, function(value, key, index){
this.log(value, key, index);
});
Array|Object grep([collection, context], handler)
Отфильтрует коллекцию и вернет новую в виде массива или объекта, в зависимости от того что было указано в качестве коллекции.
grep([1,2,3,4], function(value){ return value % 2 === 0; });
Array|Object collect([collection, context], handler)
Вызывает принятый обработчик, в заданном или глобальном контексте, для каждого элемента коллекции и использует резутат вызова как новое значение для этих элементов. Вернет либо новый массив, либо новый объект, в зависимости от того что было указано в качестве коллекции.
collect([1,2,3], function(value, key, index){ return value * index; }); // [0, 2, 6]
Array|Object collectEntries([collection, context], handler)
Вызывает принятый обработчик, в заданном или глобальном контексте, для каждого элемента коллекции и использует резутат вызова как новые ключ и значение для этих элементов. Если обработчик вернул false
, элемент не попадет в новую коллекцию. Вернет новую коллекцию в виде массива или объекта, в зависимости от того что было указано в качестве коллекции.
collectEntries({a: 10, b: 20}, function(value, key, index){ return [key.toUpperCase(), value * 10]; }); // {A: 100, B: 200}
String fs(format, args[, cusomMods])
Выводит строку отформатированную в соответствии с указанным форматом. Принцип работы похож на функцию printf в PHP или System.out.format в Java, только адаптированный под требования javascript.
Синтаксис ключей
- %s - без аргументов
- ${su} - без агрументов
- ${sr:foo,bar} - с аргументами
Строковые (интерпретируют аргумент как строку)
- s - отобразить как есть
- sU - привести к верхнему регистру
- su - привести первый символ каждого слова к верхнему регистру
- sL - привести к нижнему регистру
- sl - привести первый символ каждого слова к нижнему регистру
- seu - кодировать функцией encodeURIComponent
- sdu - декодировать функцией decodeURIComponent
- sr:from,to - заменить подстроку указанную в первом параметре на подстроку указанную во втором
Числовые (аргумент интерпретируется как число)
- d - отобразить как есть
- df:num - добавить дробную часть указанной длины (два, по умолчанию)
- de:num - научная нотация в нижнем регистре (в параметре кол-во знаков после запятой)
- dE:num - научная нотация в верхнем регистре (в параметре кол-во знаков после запятой)
- dh - как шестнадцатиричное число в нижнем регистре
- dH - как шестнадцатиричное число в верхнем регистре
- db - как бинарное число
- do - как восьмиричное число
- dn:from,to - переводит в из указанной системы в указанную систему счисления (по умлочанию 10)
Массивы (аргумент будет привен к массиву, если не является таковым, и у него будет вызван метод join)
- a - элементы через запятую + побел ', '
- as:str - конкатенация элементов указаной подстрокой (по умолчанию запятая)
JSON (аргумент будет прведен к массиву, если не является массивом или объктом)
- j - будет использована функция JSON.stringify
fs("Меня зовут %su и мне ${dn:16} лет", ["виктор", 19]) // Меня зовут Виктор и мне 25 лет