ilia makarov

Объединить несколько функций в одну

Реализовать функцию compose, которая принимает аргументами любое количество функций, и возвращает функцию, которая при вызове вызовет все функции, которые compose получила аргументом.

function log1() {console.log(111)};
function log2() {console.log(222)};
function log3() {console.log(333)};
var logAll = compose(log1, log2, log3);
logAll(); // 111
          // 222
          // 333

Реализовать простейший templater

Описать функцию templater(templateString, dataObj). Функция, принимает аргументом строку и объект. Заменяет все вхождения подстрок вида ${STRING} значениями из объекта с ключом STRING. Пример использования:

templater('${who} ${action} ${what}', {
 who: 'mama',
 action: 'mila',
 what: 'ramu'
}); // 'mama mila ramu'

Ключник

Релизовать функцию createKeeper(), которая возвращает объект с 2 методами put(key, value) и get(key). Метод get(key) должен возвращать данные, которые были сохранены с помощью метода put, если вызывается с тем-же значением key, что и put. Ключами могут быть как объекты, так и примитивы, про NaN не задумываться. Если put был вызван с таким ключом, с которым уже был вызван ранее, старое значение перезатирается новым. Доступ к ключам и значениями должен быть возможен только через методы put и get.

var keeper = createKeeper();
var key1 = {};
var key2 = {};
var key1Copy = key1;

keeper.put(key1, 999)
keeper.put(key2, [1,2,3])
console.log(keeper.get(key1)); // 999
console.log(keeper.get(key2)); // [1,2,3]
console.log(keeper.get(key1Copy)); // 999
console.log(keeper.get({})); // null
keeper.put(key1, key2);
console.log(keeper.get(key1Copy) === key2); // true