Комментарии 12
array.findLast() === array[array.length-1]
Можно будет наконец просто достать последний элемент массива или нет?
Нет, array[array.length-1]
- это array.at(-1)
. А array.findLast()
как array.find только ищет с конца.
Глядишь, лет через двадцать и deepCopy появится...
Ещё год назад добавили structuredClone
Уже почти появился в виде structuredClone
Может лет через пять допилят до вида deepCopy
и уберут существующие ограничения у structuredClone
let clone = {...obj};
А так пробовали?
shallow copy - это, увы, не то, речь про это
а вы можете привести примеры задач, где 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, где каждый шаг изменения - это отдельный прототип.
Как следствие, никакой необходимости в копировании обьектов нет. А есть необходимость в правильной структуре данных. Что является фундаментом оптимизации любого прикладного кода.
Есть такое неписанное правило - если Вам понадобилась копия данных, то Вам нужно думать не о том, как данные копировать, но о том, что в архитектуре Вашего приложения есть ошибка.
Естественно это не касается системного программирования.
не особо много нового, добавили)
ECMAScript 2023 добавит в JavaScript новые методы для работы с массивами