Comics: Deadline

Opublikowano: 31.08.2022 - tagi: Podsumowanie Sierpień 2022 Blog
W sierpniu opublikowałem 9 wpisów:
RxJS:
Webstorm:
Inne:
JavaScript:
Narysowałem dwa komiksy:
Przeczytałem cztery książki:
Przesłuchałem cztery audiobooki:
Opublikowano: 30.08.2022 - tagi: JavaScript Obiekt Kopia
Załóżmy, że mamy obiekt jak poniżej:
{
name: 'Some product',
price: 100,
currency: 'PLN',
weight: 1.5,
size: 'L'
}
I chcielibyśmy pobrać większość właściwości tego obiektu, ale pozbyć się niektórych. Na przykład chcemy pominąć: weight i size. Jak rozwiązać ten problem?
Możemy użyć operatora spread: .... Przykład
const obj = {
name: 'Some product',
price: 100,
currency: 'PLN',
weight: 1.5,
size: 'L'
};
const { weight, size, ...newObj } = obj;
console.log(newObj);
Wynik:
{
name: 'Some product',
price: 100,
currency: 'PLN'
}
Opublikowano: 23.08.2022 - tagi: Komiks Rysowanie Zarządzanie
Opublikowano: 18.08.2022 - tagi: JavaScript Obiekt Kopia
Stworzenie kopii obiekt jest proste:
const originalObj = {
title: 'Foo',
value: 100,
tags: ['a', 'b', 'c']
};
const copyObj = {
...originalObj
};
copyObj.title = 'Bar';
copyObj.value = 50;
copyObj.tags.push('d');
console.log('originalObj: ', originalObj); // { title: 'Foo', value: 100, tags: ['a', 'b', 'c'] }
console.log('copyObj: ', copyObj); // { title: 'Bar', value: 50, tags: ['a', 'b', 'c', 'd'] }
Za pomocą operatora spread: ... tworzymy kopię obiektu. Następnie zmieniamy w skopiowanym obiekcie jego parametry. Oryginał się nie zmieniał. I tak miało być :)
Niestety to nie zadziała dla obiektu zagnieżdżonego.
Najpierw przykład:
const originalObj = {
name: 'Janusz Kowalski',
age: 57,
address: {
city: 'New York',
street: '99 East Golf Street'
}
};
const copyObj = {
...originalObj
};
copyObj.name = 'Grażyna Kowalska';
copyObj.address.city = 'Chicago';
copyObj.address.street = '3109 15th St';
console.log('originalObj: ', originalObj);
/*
originalObj:
{
name: 'Janusz Kowalski',
age: 57,
address: {
city: 'Chicago',
street: '3109 15th St'
}
}
*/
console.log('copyObj: ', copyObj);
/*
copyObj:
{
name: 'Grażyna Kowalska',
age: 57,
address: {
city: 'Chicago',
street: '3109 15th St'
}
}
*/
Kopia została stworzona, ale nie dla zagnieżdżonej części obiektu jak: address. Po zmianie danych w kopii zmieniły się też dane w oryginale!
Jak sobie z tym poradzić?
const originalObj = {
name: 'Janusz Kowalski',
age: 57,
address: {
city: 'New York',
street: '99 East Golf Street'
}
};
const copyObj = JSON.parse(JSON.stringify(originalObj))
copyObj.name = 'Grażyna Kowalska';
copyObj.address.city = 'Chicago';
copyObj.address.street = '3109 15th St';
console.log('originalObj: ', originalObj);
/*
originalObj:
{
...,
address: {
city: 'New York',
street: '99 East Golf Street'
}
}
*/
console.log('copyObj: ', copyObj);
/*
copyObj:
{
...,
"address": {
"city": "Chicago",
"street": "3109 15th St"
}
}
*/
Kombinacja: JSON.parse i JSON.stringify rozwiązuje ten problem.
To rozwiązanie nie zadziała jeśli obiekt zawiera funkcje. Funkcje nie zostaną skopiowane.