Fork me on GitHub

5. Node.js модули, о которых вы должны знать: hashish

Здравствуйте все! Это пятый пост в моей новой серии статей Node.js модули, о которых вы должны знать.

Первый пост был про dnode — фристайл RPC библиотеку для node.js. Второй пост был посвящен optimist — легковесному парсеру командной строки для node.js. Третий был про lazy — ленивые списки для node.js. А четвертый — про request — швецарский нож HTTP стримминга.

В этот раз я расскажу про hashish. Автором hashish является уже не безысвестный по предыдущим заметкам James Halliday. Если вас удивляет то, почему я так много пишу про его модули, то ответ простой — потому что он написал 88 модулей и каждый из них очень высокого уровня.

Hashish — JavaScript библиотека для работы с хэшами или, другими словами, в ней содержится набор функций, позволяющий манипулировать содержимым хэша.

Вот пример использования:

var Hash = require('hashish');

Hash({ a : 1, b : 2, c : 3, d : 4 })
    .map(function (x) { return x * 10 })
    .filter(function (x) { return x < 30 })
    .forEach(function (x, key) {
        console.log(key + ' => ' + x);
    });

Здесь Hash — объект, созданный на основе хэша { a: 1, b: 2, c: 3, d: 4 }. Далее, с помощью функции map каждое значение ключа хэша умножается на 10. После этой операции хэш преобразуется в: { a: 10, b: 20, c: 30, d: 40 }. На следующем этапе применяется функция filter, которая оставляет в хэше только те элементы, значения которых меньше 30. После этого шага хэш имее вид: { a: 10, b: 20 }. И в конце применяется функция forEach, которая выводит на экран оставшиеся после предыдущих преобразований элементы хэша и их значения. Результат будет следующим:

a => 10
b => 20

Обратите внимание, насколько похож API для работы с хэшом на node-lazy, который я описывал ранее. Все преобразования могут быть связанными в последовательность, так что ваш код будет прекрасно выглядеть.

Если вы не хотите или не можете связывать функции, то hashish так же позволяет использовать его функции в дискретном варианте:

var Hash = require('hashish');
var obj = { a : 1, b : 2, c : 3, d : 4 };

var mapped = Hash.map(obj, function (x) {
    return x * 10
});

console.dir(mapped);

Обратите внимание на то, как вызывается Hash.map для obj хэша. В результате каждое значение элемента хэша будет умножено на 10:

{ a: 10, b: 20, c: 30, d: 40 }

Hashish, кроме всего прочего, предоставляет возможность получать значения различных атрибутов. Вот пример:

$ node
> var Hash = require('hashish');
> var obj = { a : 1, b : 2, c : 3, d : 4 };
>
> Hash(obj).keys
[ 'a', 'b', 'c', 'd' ]
> Hash(obj).values
[ 1, 2, 3, 4 ]
> Hash(obj).length
4

Установить hashish можно через npm:

npm install hashish

Наслаждайтесь!