Slice () на массив объекта не вернул ссылку?

Пожалуйста, помогите мне, я действительно запутался в 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:

https://i.stack.imgur.com/94emV.png

.reverse() не изменяет ни один из элементов в массиве, он только изменяет сам массив (и если массив был только что создан с помощью slice, ничего за пределами нарезанного массива не будет затронуто)
CertainPerformance 02.01.2019 09:25

Но данные являются ссылкой на (this.state.data). Если данные перевернуты, this.state.data также должен быть перевернут, верно? И если я изменю значение объекта в массиве данных, (this.state.data) не изменится.

tung2389 02.01.2019 09:27

Это не повлияет ни на что за пределами нарезанного массива?. Как насчет моего первого кода? Вы можете попробовать это в своем браузере

tung2389 02.01.2019 09:28

Поскольку вы нарезали его, это не просто ссылка на массив this.state.data - вы создали массив новый с помощью .slice, поэтому перестановка элементов в массиве новый каким-либо образом не изменит их порядок в исходном массиве.

CertainPerformance 02.01.2019 09:28

Ваш исходный код изменяет пункт в массиве. Ваш код this.state.data изменяет вновь созданный массив, но не отдельные элементы.

CertainPerformance 02.01.2019 09:29

Точно, просто зарегистрируйте и старый, и новый массив, и вы увидите, что они не совпадают.

minitauros 02.01.2019 09:29

Нет, slice возвращает новый массив, который вы затем перевернули. Если вы измените элементы обратного массива, исходные элементы тогда в this.state.data будут мутировать.

Drew Reese 02.01.2019 09:30

Возможно ли, что this.state обновляется другой функцией, что делает его полностью отличным от data?

Hydrothermal 02.01.2019 10:00

Извините, это мой тупой баг. Спасибо всем за помощь.

tung2389 02.01.2019 10:03
codeandbox.io/s/533kyorr7p иллюстрирует
Drew Reese 02.01.2019 10:04

Спасибо, это моя вина, Дрю Риз

tung2389 02.01.2019 10:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
11
350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме