Как стать автором
Обновить

Underscore.js — библиотека, которая так хороша, что должна быть вне закона

Время на прочтение3 мин
Количество просмотров49K
Каждый, кому приходилось писать объемные куски осмысленного кода на javascript, рано или поздно понимал, что ему многого не хватает в этом языке или просто неудобны некоторые врожденные конструкции. Для сглаживания шероховатостей применяются jQuery, Prototype, MooTools etc. Кто-то уже мало представляет себе, как можно кодить без них. Сегодня я расскажу о еще одной маааленькой библиотечке, которая делает мир javascript-программиста еще прекраснее. Речь пойдет о Underscore.js

Underscore.js или просто _.js — это набор функций-утилит, к которым привыкли любители функционального программированя, Ruby, Python или Prototype.js (но, в отличие от Prototype эта библиотека не расширяет базовые классы JavaScript). Она была написана, чтобы хорошо уживаться с jQuery.
Underscore.js предоставляет более 60 функций. Часть из них рассчитана на любителей map-reduce, другая — специальные вспомогательный функции для javascript. Библиотека умеет делегировать вызовы, если какая-то функциональность реализована разработчиками браузеров.

Вот список функций, который в ней реализован и примеры из официальной документации:

Работа с коллекциями
each, map, reduce, reduceRight, detect, select, reject, all, any, include, invoke, pluck, max, min, sortBy, sortedIndex, toArray, size
Примеры
// Map & Reduce
_.map([1, 2, 3], function(num){ return num * 3 }); // => [3, 6, 9]
var sum = _.reduce([1, 2, 3], 0, function(memo, num){ return memo + num }); // => 6
// Любой из элементов массива true
_.any([null, 0, 'yes', false]); //=> true
// Все элементы массива true
_.all([true, 1, null, 'yes']); // => false
// Вытаскиваем массив значений по ключу
var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}];
_.pluck(stooges, 'name'); // => ["moe", "larry"]


Работа с массивами
first, rest, last, compact, flatten, without, uniq, intersect, zip, indexOf, lastIndexOf, range
Примеры
// Первый элемент массива
_.first([5, 4, 3, 2, 1]); // => 5
// Последний элемент массива
_.last([5, 4, 3, 2, 1]); // => 1
// Убрать неугодные элементы
_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4]
// Оставить только уникальные элементы
_.uniq([1, 2, 1, 3, 1, 4]); // => [1, 2, 3, 4]


Работа с функциями
bind, bindAll, memoize, delay, defer, wrap, compose
Примеры
// Кэшируем результаты вычислений функции
var fibonacci = function(n) {
return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
};
var fastFibonacci = _.memoize(fibonacci);


Работа с объектами
keys, values, functions, extend, clone, tap, isEqual, isEmpty, isElement, isArray, isArguments, isFunction, isString, isNumber, isBoolean, isDate, isRegExp isNaN, isNull, isUndefined
Примеры
// Вытащить имена свойств
_.keys({one : 1, two : 2, three : 3}); // => ["one", "two", "three"]
// Вытащить значения свойств
_.values({one : 1, two : 2, three : 3}); // => [1, 2, 3]
// Копируем свойства одного объекта в другой
_.extend({name : 'moe'}, {age : 50}); // => {name : 'moe', age : 50}


Утилиты
noConflict, identity, times, breakLoop, mixin, uniqueId, template
Примеры
// Удобно и привычно
_(5).times(function(){ console.log('Odelay!"); });


Для последовательных вызовов
chain, value

Названия говорят сами за себя. Документацию можно найти здесь, там очень хорошие и понятные примеры. Я думаю, что даже незнание английского никого не остановит. Но если есть большая потребность, то можно перевести на русский.
Стоит добавить, что в сжатом виде библиотека весит 2.9кб, а исходники лежат на GitHub.

Upd. Добавил немного примеров.
Теги:
Хабы:
+149
Комментарии51

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события