Разница между массивом объекта - PullRequest
1 голос
/ 19 июня 2019

Я пытался вставить объект в массив.его успешно вставлен в массив.в чем разница между этими тремя кодами.

Array.push(Object.assign({}, JSON.parse(JSON.stringify(Object))))
Array.push(Object.assign({},Object))
Array.push(Object)

Ответы [ 3 ]

4 голосов
/ 19 июня 2019

Во-первых, этот код может не работать , если вы переопределили свои глобальные объекты - Object.assign является статическим методом, но потому что вы рассматриваете Object как фактический объект (экземпляр Object), тогда он не будет доступен через этот метод.

Код будет работать только в том случае, если вы переименуете переменные - я только что их поместил в нижний регистр - или если вы поймете, что вы помещаете функцию Object в массив.

Первая строка:

array.push(Object.assign({}, JSON.parse(JSON.stringify(object))));

Вставит глубокую копию object в массив. Глубокое копирование означает, что нет ссылок - это два совершенно разных объекта. Изменение оригинала object не приведет к изменению глубокой копии object внутри array. Функции и методы будут удалены, как и все значения undefined. Циркулярные ссылки (например, window.window.window...) также потерпят неудачу (потому что вы пытаетесь поместить бесконечное количество символов в строку - никогда не будет хорошей идеей

Вторая строка:

array.push(Object.assign({}, object));

Переместит мелкую копию из object в array. Это означает, что свойства самого объекта будут скопированы по значению, а свойства внутри вложенных объектов будут скопированы по ссылке.

Третья строка:

array.push(object);

Перенесет ссылку на object в array. Это означает, что если object изменяется, object внутри array также будет изменен.

1 голос
/ 19 июня 2019
Array.push(Object.assign({}, JSON.parse(JSON.stringify(Object))))

У него четыре разные вещи -

  1. JSON.stringify - При отправке данных на веб-сервер данные должны быть строкой. Таким образом, вы в основном конвертируете свой объект в String/searializing. Но здесь, в вашем случае, вы, вероятно, имеете глубоко вложенный object, поэтому вы конвертируете его в string/searializing, чтобы полностью его клонировать, потому что objects является ссылочной переменной.
  2. JSON.parse - Это противоположно stringify При получении данных с веб-сервера данные всегда являются строкой. И так как вы используете Object.assign метод, который требует объекта, вам нужно преобразовать cloned sting object обратно в object.
  3. Object.assign - метод используется для копирования значений всех перечисляемых собственных свойств из одного или нескольких исходных объектов в целевой объект. Он вернет целевой объект. Здесь вы копируете скопированное object в empty object - {} со всеми остальными own properties/ proto properties
  4. Array.push - Наконец, вы помещаете свой свежий объект в array

    Array.push(Object.assign({},Object))
    

Здесь вы копируете адрес object на новый empty object, который затем нажимаете на array, однако это reference, поэтому любое изменение object внутри этого array изменит исходный object потому что вы скопировали адрес объекта.

Array.push(Object)

В этом случае вы просто нажимаете адрес object непосредственно на array, и любое изменение в нем приведет к изменению исходного объекта.

0 голосов
/ 19 июня 2019
Array.push(Object.assign({}, JSON.parse(JSON.stringify(Object))))

Для приведенного выше примера,

-Вы создаете строку из объекта с помощью JSON.stringify () и

- Создание нового объекта из этой строки с помощью JSON.parse () и

- Снова создать новый объект с помощью Object.assign (), передав новый пустой объект {}.

- Здесь вы клонируете объект в новый объект и помещаете его в массив.

Array.push(Object.assign({},Object))

Для приведенного выше примера,

-Вы создаете новый объект с помощью Object.assign (), передавая новый пустой объект {}.

- Здесь вы клонируете объект в новый объект и помещаете его в массив

Array.push(Object)

Для приведенного выше примера,

-Вы просто помещаете объект в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...