loading
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// В коде используются два разных map. Один самописный, другой на массиве. 
const map = (f, tree) => {
  // Извлекаем детей из узла.
  const [, children] = tree;
  // Применяем к узлу переданную функцию
  // и извлекаем имя изменённого узла.
  const [newName] = f(tree);
  // Если узел не содержит детей
  // возвращаем его с изменённым именем.
  if (!children) {
    return [newName];
  }
  // Возвращаем узел с именем и детьми,
  // для каждого из которых вызывается
  // наша функция map
  return [newName, children.map((c) => map(f, c))];
};

const tree = ['A', [
  ['B', [['E'], ['F']]],
  ['C'],
  ['D', [['G'], ['J']]],
]];

// Вызываем map и передаём в неё функцию,
// которая приводит имя узла к нижнему регистру.
const mappedTree = map(([name]) => [name.toLowerCase()], tree);

JSON.stringify(mappedTree);
Babel Compiler v6.4.4 Copyright (c) 2014-2015 Sebastian McKenzie