Код Middle Expo и bare обновлено

Слияние конфигурации под платформу

Условие

Конфигурация приложения хранит общие настройки и переопределения для платформ: { "common": {...}, "ios": {...}, "android": {...} }. Напишите resolveConfig(config, platform): глубоко сливает common и раздел платформы (значения платформы важнее). Правила: объекты сливаются рекурсивно, массивы и примитивы из платформы заменяют общие целиком, значение null в разделе платформы удаляет ключ. Исходные объекты не менять. Если раздела платформы нет, вернуть копию common.

Примеры

resolveConfig({"common":{"name":"Shop","version":"1.0"},"ios":{"name":"Shop iOS"}}, "ios") // {"name":"Shop iOS","version":"1.0"}
resolveConfig({"common":{"name":"Shop"},"ios":{"name":"X"}}, "android") // {"name":"Shop"}
resolveConfig({"common":{"api":{"url":"a","timeout":10}},"android":{"api":{"timeout":20}}}, "android") // {"api":{"url":"a","timeout":20}}

Как подойти

Подсказки: 2
  1. Отдельная функция merge(base, over) с рекурсией для пары объектов.
  2. Для неизменности копируйте значения (JSON.parse(JSON.stringify(...)) подойдёт для JSON-данных).

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме