Создать новый экземпляр из массива объектов в angular - PullRequest
0 голосов
/ 04 апреля 2020

В моем приложении Angular я пытался получить новый экземпляр из массива объектов, чтобы внести некоторые изменения в значение в некотором объекте моего массива, например:

invoiceItems = [ 

 {id: 2028, name: "22", qty: 50, buyPrice: 18, salePice: 22, …},
 {id: 1017, name: "item 2", qty: 30, buyPrice: 25, salePice: 30, …},
 {id: 1002, name: "item 1", qty: 20, buyPrice: 22, salePice: 27, …},
]

Я хочу создать новый экземпляр аналогично тому, как это после того, как принять новое значение для некоторого свойства

, чтобы быть новым массивом, подобным этому:

newInvoiceItems = [
{id: 2028, name: "22", qty: 70, buyPrice: 20, salePice: 22, …},
 {id: 1017, name: "item 2", qty: 30, buyPrice: 25, salePice: 30, …},
 {id: 1002, name: "item 1", qty: 20, buyPrice: 22, salePice: 27, …},

, но проблема в том, что первый массив также изменился на новое значение. прости меня, потому что я все еще lerning и я надеюсь, что штраф за помощь заранее спасибо

Ответы [ 3 ]

2 голосов
/ 04 апреля 2020

объекты и массивы передаются по ссылке в javaScript / typeScript, поэтому, если вы обновите массив где-то, он будет обновлен в другом месте

. Перед обновлением необходимо сделать копию исходного массива.

вот пара методов, которые вы можете использовать, чтобы получить копию некоторого массива 1 - используя JSON.parse(JSON.stringify()) метод

let snapshotOfMyArray = JSON.parse(JSON.stringify(myArray));

2 - используя map функцию

let snapshotOfMyArray = myArray.map(item => ({ ...item }));
1 голос
/ 04 апреля 2020

Вы можете сделать:

let newInvoiceItems = JSON.parse(JSON.stringify(invoiceItems))
0 голосов
/ 22 апреля 2020

некоторые другие способы глубокого клонирования были бы

var clone = myArray.slice();

//ES6
const clone = [...myArray];

Следует отметить, что распространение работает только на один уровень глубины, поэтому не будет работать для многомерного массива

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