10 Javascript задач с объектами

10 Javascript задач с объектами

Продолжая идею десяти задачи с массивами, я подготовил подобную коллекцию задач с объектами. Как и предыдущая, эта подборка ориентирована на junior и middle разработчиков javascript.

К каждой задаче вы найдете описание, ожидаемый результат и решение. Я не утверждаю, что мои решения это наилучший вариант для решения каждой задачи, но я надеюсь, что они помогут вам, если вы застрянете в середине разработки.

Также, я хотел бы упомянуть, что я не обрабатываю все возможные варианты ошибок, такие как передача undefined, null или неверные типы данных. Я предоставляю только базовое решение, а не пишу библиотеку утилит.

Вы можете начать работу в своем репозитории или клонировать мой. В моем репозитории вы найдете полный список задач и решений к ним. Также вы сможете проверить ваши решения с помощью заранее подготовленных unit-тестов. Ссылка: https://github.com/andrewborisov/javascript-practice.

  1. isPlainObject. Напишите функцию, которая проверяет, является ли элемент именно простым объектом, а не массивом, null и т.п.
/**
  * Описание задачи: Напишите функцию, которая проверяет, является ли элемент именно простым объектом, а не массивом, null и т.п.
  * Ожидаемый результат: true если это объект, false в противном случае. ({ a: 1 }) => true, ([1, 2, 3]) => false
  * Сложность задачи: 1 of 5
  * @param element - элемент для проверки
  * @returns {boolean}
*/

export const isPlainObject = (element) => {
  throw new Error(`Напишите здесь свое решение ${element}`);
};

const data = { a: 1 };
console.log(isPlainObject(data)); // true

Решение задачи “isPlainObject”

  1. MakePairs. Напишите функцию, которая возвращает вложенный массив вида [[key, value], [key, value]].
/**
  * Описание задачи: Напишите функцию, которая возвращает вложенный массив вида `[[key, value], [key, value]]`.
  * Ожидаемый результат: ({ a: 1, b: 2 }) => [['a', 1], ['b', 2]]
  * Сложность задачи: 1 of 5
  * @param {Object} object - любой объект для трансформации
  * @returns {Array} - вложенный массив
*/

export const makePairs = (object) => {
  throw new Error(`Напишите здесь свое решение ${object}`);
};

const data = { a: 1, b: 2 };
console.log(makePairs(data)); // [['a', 1], ['b', 2]]

Решение задачи “MakePairs”

  1. Without. Напишите функцию, которая возвращает новый объект без указанных значений.
/**
  * Описание задачи: Напишите функцию, которая возвращает новый объект без указанных значений.
  * Ожидаемый результат: ({ a: 1, b: 2 }, 'b') => { a: 1 }
  * Сложность задачи: 2 of 5
  * @param {Object} object - любой объект
  * @param {?} args - список значений для удаления
  * @returns {Object} - новый объект без удаленных значений
*/

export const without = (object, ...args) => {
  throw new Error(`Напишите здесь свое решение ${object} ${args}`);
};

const data = { a: 1, b: 2, c: 3 };
console.log(without(data, 'b', 'c')); // { a: 1 }

Решение задачи “Without”

  1. IsEmpty. Напишите функцию, которая делает поверхностную проверку объекта на пустоту.
/**
  * Описание задачи: Напишите функцию, которая делает поверхностную проверку объекта на пустоту.
  * Ожидаемый результат: ({}) => true,
      ({ a: undefined }) => true,
      ({ a: 1 }) => false
  * Пустые значения: '', null, NaN, undefined
  * Сложность задачи: 2 of 5
  * @param {Object} object - объект с примитивами
  * @returns {boolean}
*/

export const isEmpty = (object) => {
  throw new Error(`Напишите здесь свое решение ${object}`);
};

const data = { a: 1, b: undefined };
const data2 = { a: undefined };
console.log(isEmpty(data)); // false
console.log(isEmpty(data2)); // true

Решение задачи “IsEmpty”

  1. IsEqual. Напишите функцию, которая поверхностно сравнивает два объекта.
/**
  * Описание задачи: Напишите функцию, которая поверхностно сравнивает два объекта.
  * Ожидаемый результат: True если объекты идентичны, false если объекты разные ({ a: 1, b: 1 }, { a: 1, b: 1 }) => true
  * Сложность задачи: 2 of 5
  * @param {Object<string | number>} firstObj - объект с примитивами
  * @param {Object<string | number>} secondObj - объект с примитивами
  * @returns {boolean}
*/

export const isEqual = (firstObject, secondObject) => {
  throw new Error(`Напишите здесь свое решение ${firstObject} ${secondObject}`);
};

const data = { a: 1, b: 1 };
const data2 = { a: 1, b: 1 };
const data3 = { a: 1, b: 2 };
console.log(isEqual(data, data2)); // true
console.log(isEqual(data, data3)); // false

Решение задачи “IsEqual”

  1. Invoke. Напишите функцию, которая вызывает метод массива на заданный путь объекта.
/**
  * Описание задачи: Напишите функцию, которая вызывает метод массива на заданный путь объекта.
  * Ожидаемый результат: ({ a: { b: [1, 2, 3] } }, 'a.b', splice, [1, 2]) => [2, 3]
  * Сложность задачи: 3 of 5
  * @param {Object} object
  * @param {String} path - путь в объекте
  * @param {String} func - метод массива для исполнения
  * @param {Array} [args] - список аргументов
  * @returns {?}
*/

export const invoke = (object, path, func, args) => {
  throw new Error(`Напишите здесь свое решение ${object} ${path} ${func} ${args}`);
};

const data = { a: { b: [1, 2, 3] } }
console.log(invoke(data, 'a.b', 'splice', [1, 2])); // [2, 3]

Решение задачи “Invoke”

  1. IsEmptyDeep. Напишите функцию, которая делает глубокую проверку на пустоту объекта.
/**
  * Описание задачи: Напишите функцию, которая делает глубокую проверку на пустоту объекта.
  * Пустые значения: '', null, NaN, undefined, [], {}
  * Ожидаемый результат: ({}) => true,
      ({ a: { b: undefined } }) => true,
      ({ a: { b: [] } }) => true
  * Сложность задачи: 3 of 5
  * @param {Object} object - любой объект
  * @returns {boolean}
*/

export const isEmptyDeep = (object) => {
  throw new Error(`Напишите здесь свое решение ${object}`);
};

const data = { a: { b: undefined } };
const data2 = { a: { b: 1 } };
console.log(isEmptyDeep(data)); // true
console.log(isEmptyDeep(data2)); // false

Решение задачи “IsEmptyDeep”

  1. IsEqualDeep. Напишите функцию, которая делает глубокое сравнение объектов.
/**
  * Описание задачи: Напишите функцию, которая делает глубокое сравнение объектов.
  * Ожидаемый результат: True если объекты идентичны ({ a: 1, b: { c: 1 } }, { a: 1, b: { c: 1 } }) => true
  * @param {Object} firstObj - Объект с любыми значениями
  * @param {Object} secondObj - Объект с любыми значениями
  * @returns {boolean}
*/
export const isEqualDeep = (element) => {
  throw new Error(`Напишите здесь свое решение ${element}`);
};
const data = { a: 1, b: { c: 1 } };
const data2 = { a: 1, b: { c: 1 } };
const data3 = { a: 1, b: { c: 2 } };
console.log(isEqualDeep(data, data2)); // true
console.log(isEqualDeep(data, data3)); // false

Решение задачи “IsEqualDeep”

  1. Intersection. Напишите функцию, которая поверхностно находит пересечения объектов и возвращает объект пересечений.
/**
  * Описание задачи: Напишите функцию, которая поверхностно находит пересечения объектов и возвращает объект пересечений.
  * Ожидаемый результат: ({ a: 1, b: 2 }, { c: 1, b: 2 }) => { b: 2 }
  * @param {Object<string | number>} firstObj - объект с примитивными значениями
  * @param {Object<string | number>} secondObj - объект с примитивными значениями
  * @returns {Object}
*/

export const intersection = (firstObject, secondObject) => {
  throw new Error(`Напишите здесь свое решение ${firstObject}, ${secondObject}`);
};

const data = { a: 1, b: 2 };
const data2 = { c: 1, b: 2 };
console.log(intersection(data, data2)); // { b: 2 }

Решение задачи “Intersection”

  1. IntersectionDeep. Напишите функцию, которая глубоко находит пересечения объектов и возвращает объект пересечений.
/**
  * Описание задачи: Напишите функцию, которая глубоко находит пересечения объектов и возвращает объект пересечений.
  * Ожидаемый результат: ({ a: 1, b: { c: 3 } }, { c: 1, b: { c: 3 } }) => { b: { c: 3 } }
  * @param {Object} firstObj - объект любых значений
  * @param {Object} secondObj - объект любых значений
  * @returns {Object}
*/

export const intersectionDeep = (firstObject, secondObject) => {
  throw new Error(`Напишите здесь свое решение ${firstObject}, ${secondObject}`);
};

const data = { a: 1, b: { c: 3 } };
const data2 = { c: 1, b: { c: 3 } };
console.log(intersectionDeep(data, data2)); // { b: { c: 3 } }

Решение задачи “IntersectionDeep”

Я надеюсь, что предоставленный список задач позволит вам узнать что-то новое или хотя бы развлечься.

Ссылки

Мой канал о javascript и веб-разработке в целом: https://t.me/js_web_development

javascript
exercises
objects