Как стать автором
Обновить

Комментарии 12

Нет, array[array.length-1] - это array.at(-1). А array.findLast() как array.find только ищет с конца.

Глядишь, лет через двадцать и deepCopy появится...

Ещё год назад добавили structuredClone

Спасибо. Странно, упустил, хотя в чужом реальном коде нигде пока не встречал. Жаль только, что с ограничениями по классам и методам объекта при клонировании (впрочем, как и в лодаше).

let clone = {...obj};

А так пробовали?

а вы можете привести примеры задач, где deepCopy является єффективным инструментом решения задачи?

Сходу пример не приведу, но не помню за последние годы ни одного проекта без его использования. Чаще всего цель одна - иммутабельность исходного сложного объекта с данными.

Хотя нет, вспомнился пример:
Vue.js компонент грида, в него передается пропс - начальные фильтры initialFilters, являющиеся массивом объектов, далее эти фильтры сохраняются в контексте компонента filters и пользователь может их модицифировать настройками грида. Без клона мы имеем передачу массива объектов по ссылке через пропс и изменение в компоненте грида приводит к изменению исходных объектов в массиве родителя, передавшего его в пропсы.

В рамках архитектуры языка JavaScript, иммутабельность, а главное процесс модификации данных, делается не копированием, но путем создания цепочки прототипов.

Например у нас есть Exotic Object Array - [1,2,3] и мы хотим получить еще один подобный обьект с измененным элементом с индексом 1 на `Primitive Value` 7.
Для этого ненужно копировать обьект, а нужно сделать следующее:

var srcArray = [1,2,3];
var copyArray = Array(srcArray.length);
Object.setPrototypeOf( copyArray, srcArray);
copyArray[1] = 7;
//
copyArray[0]; // 1
copyArray[1]; // 7
copyArray[2]; // 3

То есть Вы получаете цепочку всех вычислений вышего Array, где каждый шаг изменения - это отдельный прототип.

Как следствие, никакой необходимости в копировании обьектов нет. А есть необходимость в правильной структуре данных. Что является фундаментом оптимизации любого прикладного кода.

Есть такое неписанное правило - если Вам понадобилась копия данных, то Вам нужно думать не о том, как данные копировать, но о том, что в архитектуре Вашего приложения есть ошибка.

Естественно это не касается системного программирования.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости

Истории