Как скопировать объект из anarray, отредактировать его и вернуть как новый объект в массив - PullRequest
0 голосов
/ 02 ноября 2019

Мне нужно скопировать объект из данного массива, изменить некоторые значения и отправить его обратно в массив как новое значение.

//array:
entries[
{id: "1234", credit: "2000", debit: "3000"},
{id: "1235", credit: "2000", debit: "3000"},
{id: "1236", credit: "2000", debit: "3000"}
]

Я сделал следующее: я отфильтровал массивдля поиска объекта.

result = entries.filter(entry => entry.id == id);

Скажем, я получил объект с идентификатором 1235 в результате массива обратно в качестве первого значения. Объект находится здесь: result[0].

Теперь мне нужна копия из этого массива, переключить кредитные и дебетовые значения и отправить ее обратно в массив записей как новый элемент.

Я пробовал это до сих пор, но это не работает:

Object.assign(newObj, oldObj);
newObj.debit = result[0].credit;
newObj.credit = result[0].debit;
newObj.id = getNewEntryId(data); // here I get an new id which is free - works fine so far
entries.push(newObj);

Новые и старые объекты меняются. Я думаю, что assign делает не копию, а ссылку. Какую функцию выбрать? Или как эта проблема решается нормально?

Ответы [ 3 ]

0 голосов
/ 02 ноября 2019
let newObj = {
    ...oldObj,
    id: oldObj.id,
    debit: oldObj.credit,
    credit: oldObj.debit
};
entries.push(newObj);
0 голосов
/ 02 ноября 2019
var newObject = Object.assign({}, entries.filter(entry => entry.id == id));
newObject.id = ...;
entries.push(newObject);

должно сработать:)

Если у вас есть объект с методами, используйте Object.create.

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

Лучше всего использовать lodash с функцией deepClone, которая рекурсивно создает полную копию.

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