Простой вопрос, с которым я столкнулся.
arr = [[1,2,3],[3,4,5],[6,7,8]];
x = arr[0];
x[0] = 2; //x returns [2,2,3]
В то же время arr также обновляется до [[2,2,3], [3,4,5], [6,7,8]] Как я могу предотвратить это. Я не хочу, чтобы arr менялся и почему это происходит?
Оператор = не копирует данные.
Оператор = создает новую ссылку на одни и те же данные.
Легким решением было бы сделать следующее при назначении значения x
:
x = arr[0].slice();
arr
изменялось, то почему вы присваиваете значениеx[0]=2
посколькуx=arr[0]
не копирует, а создает массив по ссылке ??x = arr[0].slice()
. Вы мутируете массив по ссылке, потому что вы не создаете копию, присваивая массив переменной.