Глубокое клонирование атрибутов объектов в OpenLayers - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно сделать клон функции в OpenLayers (я использую последнюю версию 6.3.1, но я не задаю версию, я думаю, c).

Сама функция имеет метод .clone(). К сожалению, мои атрибуты / свойства, определенные для объекта, являются объектами и массивами, а метод .clone делает только поверхностную копию объекта. Так что, если я изменю какое-то значение в клонированном объекте, оригинальный объект тоже изменится.

Итак, как сделать глубокую копию объекта в OpenLayers?

1 Ответ

1 голос
/ 07 апреля 2020

Как Анатолий , предложенный в комментариях, это можно сделать методом .setProperties().

РЕДАКТИРОВАТЬ 18.4.2020: поскольку геометрия объекта включена в .getProperties() и его нельзя скопировать должным образом с помощью JSON.parse() / JSON.stringify(), мне пришлось добавить еще одну строку к исходному коду, задав geometry свойство clonedProperties.

Мой код (без любая внешняя библиотека) выглядит следующим образом:

const clonedFeature = feature.clone();
const clonedProperties = JSON.parse(JSON.stringify(feature.getProperties()));
clonedProperties.geometry = clonedFeature.getGeometry(); // see EDIT
// Maybe do something with clonedProperties as I do.
clonedFeature.setProperties(clonedProperties, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...