JavaScript содержит метод JSON.stringify()
для приведения к строке любого значения. Он работает следующим образом:
JSON.stringify('hello'); // "hello" - для строковых значений добавляются кавычки
JSON.stringify(true); // true - значение приведено к строке, но без кавычек
JSON.stringify(5); // 5
const data = { hello: 'world', is: true, nested: { count: 5 } };
JSON.stringify(data); // {"hello":"world","is":true,"nested":{"count":5}}
JSON.stringify(data, null, 2); // null, 2 - указывают на два пробела перед ключом
// ключам добавляются кавычки
// в конце каждой строчки (линии) добавляется запятая, если имеется значение ниже
// {
// "hello": "world",
// "is": true,
// "nested": {
// "count": 5
// }
// }
stringify.js
Реализуйте и экспортируйте по умолчанию функцию, похожую на JSON.stringify()
, но со следующими отличиями:
- ключи и строковые значения должны быть без кавычек;
- строчка (линия) в строке заканчивается самим значением, без запятой.
Не используйте в своём решении саму функцию JSON.stringify()
.
Синтаксис:
stringify(value[, replacer[, spacesCount]])
Параметры:
- value
- Значение, преобразуемое в строку.
- replacer, необязательный
- Строка - отступ для ключа; Значение по умолчанию - один пробел.
- spacesCount, необязательный
- Число - количество повторов отступа ключа. Значение по умолчанию - 1.
import stringify from './stringify.js';
stringify('hello'); // hello - значение приведено к строке, но не имеет кавычек
stringify(true); // true
stringify(5); // 5
const data = { hello: 'world', is: true, nested: { count: 5 } };
stringify(data); // то же самое что stringify(data, ' ', 1);
// {
// hello: world
// is: true
// nested: {
// count: 5
// }
// }
stringify(data, '|-', 2);
// Символ, переданный вторым аргументом повторяется столько раз, сколько указано третьим аргументом.
// {
// |-|-hello: world
// |-|-is: true
// |-|-nested: {
// |-|-|-|-count: 5
// |-|-}
// }
Подсказки
- чтобы лучше понять как работает
JSON.stringify()
, запускайте его с разными данными и параметрами в консоли браузера. - проверки в тестах идут от простого к сложному:
- проверка на примитивных типах;
- проверка на "плоских" данных;
- проверка на "вложенных" данных.
- вы можете иимпортировать
lodash
и использовать в решении. Он подключен в упражнениии, но решить задачу можно и без него, поэтому не импортирован
Реализуйте функцию так же пошагово, проверяя, что изменения для сложных кейсов не сломали более простые;
Для полного доступа к испытанию нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Отзывы

Чумовое задание! Часа 4 на него убил. Уже стал чувствовать себя как Серебряков в Левиафане, где он плачет "Ничего не понимаю!" Несколько раз перечитал заново урок про аккумулятор при обходе деревьев, про reduce и рекурсию. Какая же это радость, когда, наконец, видишь эти зелёные тесты! Вот это прокачка! Считаю, если ты не можешь решить это испытание, то ты не овладел в полной мере самыми главными темами: функции высшего порядка, рекурсия и деревья. А, значит, двигаться дальше нет смысла.

Спасибо огромное за это мозговыносящее задание. Прокачалась на все 100! Очень советую всем дойти до конца и выполнить его. А если думаете, что вы затупок, помните, что у меня ушло на это задание 5 дней!(