Хабр Курсы для всех
РЕКЛАМА
 Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать! 
Деструктуризация доступна? Моя версия итератора (не сложно переделать на фильтр и редьюсер)
const map = ([a, ...rest], cb) => ("" + [...rest, ""] === "") ? [cb(a)] : [cb(a), ...map(rest, cb)]Я знаю, Ч — читабельность, зато работает с null, undefined и любыми другими выражениями. (map, cb, rest и a не сложно переназвать в _1, 1, 2, но тогда вообще не понятно будет)
Мне вот интересно стало, есть ли более изящная конструкция проверит что массив не пустой, чем ("" + [...rest, ""] === "")? Потому что данный метод не сработает, если движок решит пустой массив приводить к другой строке, например [Array array]
Придумал еще более неоднозначное решение:
const isArrayEmpty = ar => {
  const placeholder = [];
  return [...ar, placeholder][0] === c;
}Но работает гарантированно
если ли более изящная конструкция проверит что массив не пустой
0 in array{
  let users = ['John', 'Jack', 'James'];
  ((_, S, w, a, y, i, n, g) =>
  {
    S = !0 + ''                                   // 'true'
    w = S[0] + 'oS' + S[0] + S[1] + 'ing'         // 'toString'
    a = o => o[w](36)                             // convert number to word
    y = a(28897)                                  // 'map'
    i = a(918239)                                 // 'join'
    n = [29053366, 30344, 1604835][y](a)[i](' ')  // 'happy new year'
    g = _[y](o => `${n}, ${o}!`)[i]('\n')         // all greetings
    
    window[a(27612545666)][a(28096)](g)           // console.log( )
  })(users)
}
Занимательный JavaScript: Снежный день