slice () на массив объекта не вернул ссылку? - PullRequest
0 голосов
/ 02 января 2019

Пожалуйста, помогите мне, я действительно запутался с slice() JavaScript. Я прочитал документацию Array.prototype.slice(). Он сказал:

Для ссылок на объекты (а не на фактические объекты) slice копирует ссылки на объекты в новый массив. И исходный, и новый массив ссылаются на один и тот же объект. Если ссылочный объект изменяется, изменения видны как новому, так и исходному массивам.

В этом коде я использую 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.log( arObj[1].name ); // Bill

И второй код, это не так:

let data = this.state.data.slice(); //If you don't have the slice function, it will return a reference.
console.log(this.state.data);
data.reverse();

если я попытаюсь изменить или изменить значение данных, значение (this.state.data) не изменится. Это структура this.state.data:

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

1 Ответ

0 голосов
/ 02 января 2019

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

...