С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 13.05.2025
Сообщений: 4

Мутации в JS

26.06.2025, 16:07. Показов 1037. Ответов 6

Студворк — интернет-сервис помощи студентам
Доброго времени суток уважаемые программисты.

Изучаю JS и вот добрался до мутаций, на форум написал тк данные разняться и мало чего понятно а на YouTube рассматривают только примитивные примеры этого явления.

Суть: Допустим массив есть, нужно считывать с него числа в определённой последовательности по методу "Змейка". В ходе размышлений решил работать через undefined. Ну в ходе цикла перебираем массив массивов NxN размером, координаты меняем в ручную "если след. элемент не undefined то ок" undefined присваиваем тем элементам что считали чтоб ограничить условием.

Вопрос!:Как работает мутация, я понимаю что между переменными есть связи и то что переменные это ссылки можно сказать.

Вот пример:
JavaScript
1
2
3
4
function (array) {
let copy = [...array];
copy = copy.reverse() 
// array[1,2,3] copy [3,2,1]
Казалось бы все хорошо рест иммунитет, но если применить undefined это не работает.

JavaScript
1
2
3
4
function (array) {
let copy = [...array];
copy[0] =  undefined;
// array[undefined,2,3] copy [undefined,2,3]
Теперь все не так однозначно, push, concat, shift, unshift работают так же. В непонятках полез с вопросами к нейронке а она мне отвечает:
JavaScript
1
2
3
4
5
6
7
8
9
 //Присваивание по ссылке
//javascript
const arr1 = [1, 2];
const arr2 = arr1; // Теперь arr2 и arr1 ссылаются на один массив!
arr2.push(3);
console.log(arr1); // [1, 2, 3] (мутация)
//Решение:
//Всегда создавайте копии:
const arr2 = [...arr1];
Вот тебе и замена всех программистов))) Ну если по серьезному то там и др. "советы" были через map, fulter, sort и тд, но самого главного она не рассказывает и в др. советах дает рест как панацею.
Так как же работает эта мутация, прошу объяснить досконально.

админу чаю)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2025, 16:07
Ответы с готовыми решениями:

Не работает синтаксис мутации в "createSlice" Redux
Здравствуйте, не работает синтаксис мутации в "createSlice" Redux. Вот к примеру (38 - 41ст) кусок...

Проблема мутации при изменении данных в таблице
Доброго времени суток! Существует задача, при изменении статуса продукта, в той же таблице,...

Написать программу, которая будет демонстрировать работу генетического алгоритма, используя оператор мутации.
Нужно написать программу, которая будет демонстрировать работу генетического алгоритма, используя...

6
 Аватар для voraa
1242 / 1142 / 178
Регистрация: 21.01.2024
Сообщений: 5,238
26.06.2025, 17:09
Цитата Сообщение от riverite Посмотреть сообщение
Казалось бы все хорошо рест иммунитет, но если применить undefined это не работает.
Чего у вас не работает?
Вот прямо в консоли набираем
let arr = [1,2,3];
let copy = [...arr];
copy[0] = undefined;
console.log(arr)
console.log (copy)
VM133:4 (3) [1, 2, 3]
VM133:5 (3) [undefined, 2, 3]
Цитата Сообщение от riverite Посмотреть сообщение
Теперь все не так однозначно, push, concat, shift, unshift работают так же.
push, pop, shift, unshift, reverce, sort, splice, copyWithin - изменяют массив, остальные (включая concat) - нет.

И чего конкретно надо?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3813 / 1651 / 428
Регистрация: 14.03.2022
Сообщений: 4,122
26.06.2025, 17:16
Вроде было хорошее слово - изменение. И было все понятно. Что-то изменяет массив, что-то делает новый.

Теперь же все выносят мозг себе и другим с "мутабельностью" и "инмутабельностью".
0
0 / 0 / 0
Регистрация: 13.05.2025
Сообщений: 4
26.06.2025, 17:22  [ТС]
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
snail = function (array) {
    let copy = [...array];
    copy[1][0] = undefined
    
    console.log(copy, array)
    
}
snail([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
])
Если массив двумерный выходит :


(3) [1, 2, 3]
(3) [undefined, 5, 6]
(3) [7, 8, 9]



(3) [1, 2, 3]
(3) [undefined, 5, 6]
(3) [7, 8, 9]

Добавлено через 4 минуты
Цитата Сообщение от krvsa Посмотреть сообщение
Вроде было хорошее слово - изменение. И было все понятно. Что-то изменяет массив, что-то делает новый.
Теперь же все выносят мозг себе и другим с "мутабельностью" и "инмутабельностью".
Так если я правильно все понимаю, если я создаю через копию массива и вношу в копию правки, "Изменяю" копию почему изменяется оригинал.
0
 Аватар для voraa
1242 / 1142 / 178
Регистрация: 21.01.2024
Сообщений: 5,238
26.06.2025, 17:29
Лучший ответ Сообщение было отмечено riverite как решение

Решение

Цитата Сообщение от riverite Посмотреть сообщение
Если массив двумерный выходит :
В js нет многомерных массивов. Только одномерные. Но элемент массива сам может быть массивом.
JavaScript
1
copy[1][0] = undefined
Это меняет не массив, а элемент массива, который является элементом исходного.

JavaScript
1
let copy = [...array];
Копируются элементы массива. Но каждый такой элемент является ссылкой на массив. Ссылки скопируются, а сами массивы, на которые эти ссылки указывают - нет.

У вас был массив arr.
arr[0] -> [1,2,3] (-> так я обозначил ссылку)
arr[1] -> [4,5,6]
arr[2] -> [7,8,9]

вы делаете copy = [...array] - создается новый массив в него копируются элементы - ссылки. Но ссылки на те же самые массивы, на которые ссылаются элементы arr
copy[0] -> [1,2,3]
copy[1] -> [4,5,6]
copy[2] -> [7,8,9]

И когда вы делаете copy[1][0] = undefined - вы меняете не copy, а тот массив на который указывает copy[1]. А он один единственный. Вы его не скопировали. На него ссылается и copy[1] и arr[1]

Вы С знаете? Если скопировать указатель, то копия будет указывать на туже область памяти, что и оригинал. Здесь так же.
2
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3813 / 1651 / 428
Регистрация: 14.03.2022
Сообщений: 4,122
26.06.2025, 17:50
Цитата Сообщение от riverite Посмотреть сообщение
"Изменяю" копию почему изменяется оригинал
Потому что ты в последнем случае имеешь дело не с примитивом, а с массивом. Т.о. это один и тот же массив, ссылку на него имеет как копия, так и оригинал.

Для клонирования "сложных" значений нужно более "глубокое" клонирование.
2
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3813 / 1651 / 428
Регистрация: 14.03.2022
Сообщений: 4,122
27.06.2025, 12:10
Цитата Сообщение от riverite Посмотреть сообщение
Если массив двумерный
Вот вариант с полным клонированием массива. Так все будет как ты хотел.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
snail = function (array) {
    let copy = JSON.stringify(array);
    copy = JSON.parse(copy);
    copy[1][0] = undefined
    
    console.log(copy, array)
}
snail([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
])
Но не всякий "сложный" элемент JS можно так клонировать...

Добавлено через 3 минуты
Цитата Сообщение от riverite Посмотреть сообщение
В ходе размышлений решил работать через undefined.
Стало любопытно...
Почему именно undefined так тебя приманил?
Ведь это не совсем простая "сущность".
https://dzen.ru/a/Y1IDw4x9EG-VMmoR
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2025, 12:10
Помогаю со студенческими работами здесь

Мутации данных
Подскажите, если у меня на входе массив из 100 значений, он будет как 1 ( правильный ) ну или 100...

Защита программы с использованием алгоритма "мутации"
Защитить ПО от несанкционированного доступа в соответствии с индивидуальным вариантом: Защита...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru