Как сделать так, чтобы значение переменной в исходном массиве не менялось, а изменения происходили только в массиве объектов, которые могут быть изменены?

Как изменить код таким образом, чтобы изменение состояния в массиве `counter_selected` не влияло на массив `countersDataTable`, а также чтобы можно было использовать функцию `reset`? Оба массива доступны в коде по ссылке: https://element-plus.run/#eyJzcmMvQXBwLnZ1ZSI6Ijxz...
  • 15 сентября 2023 г. 11:57
Ответы на вопрос 3
Чтобы значение переменной в исходном массиве не менялось, а изменения происходили только в массиве объектов, можно создать копию объектов из исходного массива и работать с ними. В JavaScript можно создать поверхностную (shallow) или глубокую (deep) копию объектов.

Для создания поверхностной копии объекта можно использовать метод `Object.assign()` или оператор spread (`...`), а для создания глубокой копии объекта можно воспользоваться методом `JSON.parse()` и `JSON.stringify()`.

Вам нужно изменить код следующим образом:

1. Создайте глубокую копию каждого объекта массива `countersDataTable` в новый массив `copiedCountersDataTable`:

```javascript
const copiedCountersDataTable = JSON.parse(JSON.stringify(countersDataTable));
```

2. Замените все ссылки на `countersDataTable` в коде на `copiedCountersDataTable`.

```javascript
const count = copiedCountersDataTable.findIndex(el => el.id === counter_selected.id);
if (count > -1) {
  // do something with copiedCountersDataTable[count]
}

function reset() {
  // reset copiedCountersDataTable
}
```

Теперь изменения состояния в массиве `counter_selected` не будут влиять на массив `copiedCountersDataTable`, а функция `reset` сможет сбросить значения массива `copiedCountersDataTable`.
Используйте функцию deepcopy из модуля copy для создания копии объекта, чтобы избежать проблем с изменениями в оригинале. Это позволит избежать проблем с разрывом реактивности. 
 Используйте deepcopy из модуля copy для создания глубокой копии объекта, чтобы избежать проблем с реактивностью в дальнейшем.
Похожие вопросы