JavaScript: JSON stringify

Обновлено: 23 дек., 18:16
1023
Студента
81%
Завершения

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 и использовать в решении. Он подключен в упражнениии, но решить задачу можно и без него, поэтому не импортирован

Реализуйте функцию так же пошагово, проверяя, что изменения для сложных кейсов не сломали более простые;

  • используйте метод repeat();
  • документация по JSON.stringify на MDN.

Для полного доступа к испытанию нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Отзывы

Аватар пользователя Максим Иноземцев
Максим Иноземцев 29 января 2023

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


Аватар пользователя Юлия Попова
Юлия Попова 07 мая 2022

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