środa, 12 lipca 2017

deadline'y...

Pracuję sobie w firmie, takim prawie prawdziwym startupie. Prawie, bo mamy bogatą firmę-matkę, która łoży na nasze utrzymanie.

Piszemy aplikację WWW, backend dostarcza nam trzecia firma. Ja zajmuję się dość krytyczną częścią, bo zapisem danych wprowadzonych przez przyszłego klienta. Tworzę z mozołem DTO, które mam później pchnąć do backendu i odkrywam, że czegoś nie wiem.

Pierwsze pytanie do naszego konsultanta z firmy trzeciej, który siedzi z nami w open space. Pada odpowiedź - nie da się, już rozmawiałem z działem wdrożeniowym i tej funkcjonalności na razie nie ma.

Nogi się pode mną ugięły. Jak to nie ma? Toż to krytyczna funkcjonalność... Idź do XYZ i z nim pogadaj dostaję dobrą radę i konsultant zakłada słuchawki.

Idę, ale do S, naszego product ownera, i mówię, że mamy bloker. Już nawet się oparłam dodania, że to kolejny. No co ty nie powiesz krzywi się S i uderza do konsultanta, który odsyła go do XYZ.

S właśnie wrócił do mnie z wiadomością, że it is not in scope. A soft launch mamy w pierwszej połowie sierpnia, to ciekawie kiedy trafi do implementacji?

piątek, 1 lipca 2016

shallow and deep cloning objects in JavaScript

As all values in JavaScript are pass by reference clonig is quite popular operation, to save original object. Unfortunately JavaScript does not provide any method to clone deeply the whole object.

ES6 provided some features, which could be useful, but still we have to remember, that this is only a shallow cloning.

The first solution is to use Object.assign:
const a = {
  b: {
    c: 1
  },
  z: 15
};

console.log(a); // {"b":{"c":1},"z":15}

let d = Object.assign({}, a);

d.b.c = 5;
d.z = 29;

console.log(a); // {"b":{"c":5},"z":15}
console.log(d); // {"b":{"c":5},"z":29}

The first console.log will display original a object, but in the second a.b.c value will be changed. Only a.z value will stay the same. This is what shallow cloning is. Only first level properties are cloned, rest is passed by reference.

So what would happen if d.b would be changed?
d.b = 118;

console.log(a); // {"b":{"c":5},"z":15}
console.log(d); // {"b":118,"z":29}

The same situation will happen if we will use spread operator:
const aa = {
  g: {
    h: 1
  },
  y: 15
};

console.log(aa); // {"g":{"h":1},"y":15}

let e = { ...aa };

e.g.h = 9;
e.y = 23;
console.log(aa); // {"g":{"h":9},"y":15}

So, how to make a deep cloning in JavaScript?

1. Use JSON stringify and parse
JSON.parse(JSON.stringify(object));

2. Write own method to do a deep clone of passed object.