Пожалуйста, помогите мне, я действительно запутался в slice() javascript. Я прочитал документацию Array.prototype.slice(). Он сказал:
For object references (and not the actual object), slice copies object references into the new array. Both the original and new array refer to the same object. If a referenced object changes, the changes are visible to both the new and original arrays.
В этом коде я использую slice() для фактического объекта, но он по-прежнему возвращает ссылку
var arObj = [
{ 'name': 'Jon', 'age': 24 },
{ 'name': 'Mark', 'age': 32 },
{ 'name': 'Kacy', 'age': 22 }
];
// use splice to copy array of objects into second variable
var ar2 = arObj.slice();
// modify property value in copy
ar2[1].name = 'Bill';
// view original (also modified)
console.info( arObj[1].name ); // Bill
А второй код - нет:
let data = this.state.data.slice(); //If you don't have the slice function, it will return a reference.
console.info(this.state.data);
data.reverse();
если я попытаюсь отменить или изменить значение данных, значение (this.state.data) не изменится. Это структура this.state.data:
Но данные являются ссылкой на (this.state.data). Если данные перевернуты, this.state.data также должен быть перевернут, верно? И если я изменю значение объекта в массиве данных, (this.state.data) не изменится.
Это не повлияет ни на что за пределами нарезанного массива?. Как насчет моего первого кода? Вы можете попробовать это в своем браузере
Поскольку вы нарезали его, это не просто ссылка на массив this.state.data - вы создали массив новый с помощью .slice, поэтому перестановка элементов в массиве новый каким-либо образом не изменит их порядок в исходном массиве.
Ваш исходный код изменяет пункт в массиве. Ваш код this.state.data изменяет вновь созданный массив, но не отдельные элементы.
Точно, просто зарегистрируйте и старый, и новый массив, и вы увидите, что они не совпадают.
Нет, slice возвращает новый массив, который вы затем перевернули. Если вы измените элементы обратного массива, исходные элементы тогда в this.state.data будут мутировать.
Возможно ли, что this.state обновляется другой функцией, что делает его полностью отличным от data?
Извините, это мой тупой баг. Спасибо всем за помощь.
Спасибо, это моя вина, Дрю Риз



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Спасибо всем за помощь и извините за мою глупую ошибку. Функция reverse () не повлияет на исходный массив. Это будет затронуто только в том случае, если вы измените значение одного или нескольких элементов в ссылочном массиве.
.reverse()не изменяет ни один из элементов в массиве, он только изменяет сам массив (и если массив был только что создан с помощьюslice, ничего за пределами нарезанного массива не будет затронуто)