Напишите функцию deepClone, которая создает глубокую копию объекта. Глубокая копия означает, что вложенные объекты и массивы также должны быть скопированы, а не переданы по ссылке. Функция должна корректно работать с вложенными структурами данных и массивами.
Пример кода:
const obj = {
name: "Alice",
info: { age: 25, hobbies: ["reading", "swimming"] }
};
const copy = deepClone(obj);
console.log(copy); // { name: "Alice", info: { age: 25, hobbies: ["reading", "swimming"] } }
copy.info.age = 30;
console.log(obj.info.age); // 25 (изменение не повлияло на оригинальный объект)Решение задачи
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
returnobj.map (deepClone);
}
const clone = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
// Примеры использования
const obj = {
name: "Alice",
info: { age: 25, hobbies: ["reading", "swimming"] }
};
const copy = deepClone(obj);
console.log(copy); // { name: "Alice", info: { age: 25, hobbies: ["reading", "swimming"] } }
copy.info.age = 30;
console.log(obj.info.age); // 25 (изменение не повлияло на оригинальный объект
Please open Telegram to view this post
VIEW IN TELEGRAM
В статье расскажем, как Supabase — бесплатный аналог Google Firebase — помогает разработчикам быстро создавать приложения и сайты. Узнаете, как работать с базой данных, аутентификацией, хранением файлов и реальным временем, без необходимости управлять сервером.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
В этой статье рассмотрим, как форматировать ввод данных в формах для удобства пользователей. Обсудим проблемы существующих библиотек маскирования и предложим более эффективное собственное решение.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Однажды я спросил себя: а что, если использовать контейнерные единицы измерения для каждого элемента дизайна? Я задался этим вопросом, отчасти потому, что мне показалось, что ответ может быть таким: ну, тогда всё будет очень хорошо масштабироваться!
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой цвет будет у текста в элементе
<p>, если у родителя <div> установлен цвет color: red;, а у самого элемента <p> указано свойство color: inherit;?<div style="color: red;">
<p style="color: inherit;">Текст</p>
</div>
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня поговорим о том, как использовать
handleEvent() для обработки нескольких типов событий.Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
В этой серии статей я рассказываю о Convex — новом открытом и бесплатном решении BaaS (Backend as a Service — бэкенд как услуга), которое выглядит очень многообещающе и быстро набирает популярность среди разработчиков.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Красивая анимация горения страницы при скролле. Сделана на CSS и JavaScript.
Открыть код...
Please open Telegram to view this post
VIEW IN TELEGRAM
В статье описывается, как NgRx помогает управлять состоянием приложения, работать с асинхронными операциями, улучшать производительность и упрощать масштабирование. Рассматриваются случаи, когда его внедрение наиболее оправдано.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
В статье рассказывается о нововведениях в Chrome 130: улучшенные возможности управления окнами "picture-in-picture", вложенные объявления в CSS для сложных случаев и настройка декораций для элементов в несколько строк.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Рабочая группа CSS выпустила новый модуль Values and Units Level 5: меньше кода, больше возможностей – звучит как мечта? Давайте вместе разберемся, как эти новшества изменят нашу работу и сделают веб красивее.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Небольшая подборка малоизвестных техник для HTML, CSS и JavaScript.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите функцию
mergeDeep, которая рекурсивно объединяет два объекта. Если свойства обоих объектов являются объектами, их нужно объединить. При конфликте значений свойства второго объекта перезаписывают значения первого.Пример кода:
const obj1 = { name: "Alice", info: { age: 25 } };
const obj2 = { info: { age: 30, city: "NY" } };
const merged = mergeDeep(obj1, obj2);
console.log(merged); // { name: "Alice", info: { age: 30, city: "NY" } }Решение задачи
function mergeDeep(obj1, obj2) {
const result = { ...obj1 };
for (let key in obj2) {
if (obj2[key] && typeof obj2[key] === 'object') {
result[key] = mergeDeep(result[key], obj2[key]);
} else {
result[key] = obj2[key];
}
}
return result;
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Отказавшись от неэффективных практик программирования на JavaScript, вы всегда будете писать удобный и легко читаемый код. Это сэкономит вам и вашей команде много времени и обеспечит долгую жизнь вашим продуктам.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Подробное пошаговое руководство по созданию бессерверного приложения для того, чтобы повеселиться в хорошей компании.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Apache Superset — популярный инструмент для визуализации данных с открытым кодом. Но при его использовании можно столкнуться с ограничениями. В статье обсуждается, как с помощью шаблонов Handlebars и Jinja решать эти проблемы, включая интеграцию web-верстки в дашборды и обход ограничений системы.
Читать...
Please open Telegram to view this post
VIEW IN TELEGRAM
Даны строковые представления двух целых чисел. Напишите функцию, которая возвращает строковое представление суммы этих чисел. Необходимо, чтобы решение работало с очень большими числами, которые не помещаются в стандартные типы данных.
Пример:
sumStrings('123', '456'); // => '579'
sumStrings('999999999999999999', '1'); // => '1000000000000000000'Решение задачи
function sumStrings(a, b) {
let carry = 0, result = '';
a = a.padStart(Math.max(a.length, b.length), '0');
b = b.padStart(Math.max(a.length, b.length), '0');
for (let i = a.length - 1; i >= 0; i--) {
let sum = parseInt(a[i]) + parseInt(b[i]) + carry;
carry = Math.floor(sum / 10);
result = (sum % 10) + result;
}
if (carry) result = carry + result;
return result.replace(/^0+/, '');
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Frontend-разработчик / верстальщик (стажер, junior)
Верстальщик / Junior Frontend-разработчик
Верстальщик HTML (Junior Frontend)
HTML верстальщик / Junior Frontend разработчик
Разработчик веб-приложений / фронтенд / верстальщик HTML (Junior)
Please open Telegram to view this post
VIEW IN TELEGRAM
Интересная анимация спирального текста. Сделана на CSS и JavaScript.
Открыть код...
Please open Telegram to view this post
VIEW IN TELEGRAM
Замыкания позволяют функции запоминать переменные из своей внешней области видимости даже после завершения выполнения внешней функции.
function makeCounter() {
let count = 0;
return function() {
return ++count;
};
}
const counter = makeCounter();
console.log(counter()); // 1
console.log(counter()); // 2🗣️ Замыкания полезны для создания функций с внутренним состоянием, например, счётчиков или настройки приватных данных.
Please open Telegram to view this post
VIEW IN TELEGRAM