Назад к вопросам
Middle+
3
Как можно копировать Map/Set и объекты? Поверхностное и глубокое копирование.
Компании, где спрашивали
М.Видео/эльдорадо
Ответ от нейросети
sobes.tech AI
Для копирования Map, Set и объектов в JavaScript существуют методы поверхностного и глубокого копирования.
Поверхностное копирование:
- Для объектов можно использовать
Object.assign({}, obj)или оператор расширения{...obj}. Это копирует только первый уровень свойств, вложенные объекты остаются ссылками. - Для Map и Set можно создать новый экземпляр с передачей исходного в конструктор:
Это создаст новый Map/Set с теми же элементами, но элементы сами не копируются глубоко.const newMap = new Map(oldMap); const newSet = new Set(oldSet);
Глубокое копирование:
- Для объектов можно использовать рекурсивную функцию, которая копирует вложенные объекты и массивы.
- Для Map и Set нужно рекурсивно копировать их элементы, если они сами являются объектами.
Пример глубокой копии объекта с Map и Set:
function deepCopy(value) {
if (value instanceof Map) {
const copiedMap = new Map();
for (const [key, val] of value.entries()) {
copiedMap.set(key, deepCopy(val));
}
return copiedMap;
}
if (value instanceof Set) {
const copiedSet = new Set();
for (const val of value.values()) {
copiedSet.add(deepCopy(val));
}
return copiedSet;
}
if (Array.isArray(value)) {
return value.map(deepCopy);
}
if (value && typeof value === 'object') {
const copiedObj = {};
for (const key in value) {
if (value.hasOwnProperty(key)) {
copiedObj[key] = deepCopy(value[key]);
}
}
return copiedObj;
}
return value; // примитивы
}
Таким образом, поверхностное копирование копирует только верхний уровень, а глубокое — все вложенные структуры.