Immutable Data Patterns
Updating Objects
Return a new object with one field changed.
update-object
Object spread can copy old fields and override one field. The replacement field appears later in the literal.
Updating Objects
update_object.js
Replay: real traced execution (multi-file project)
const stock = 5;
const updated = JSON.stringify({
...{ item: "pen", stock: 2 },
stock: stock,
});
const available = stock > 0;
console.log("updated=" + updated);
console.log("available=" + available);
const stock = 0;
const updated = JSON.stringify({
...{ item: "pen", stock: 2 },
stock: stock,
});
const available = stock > 0;
console.log("updated=" + updated);
console.log("available=" + available);
const stock = 12;
const updated = JSON.stringify({
...{ item: "pen", stock: 2 },
stock: stock,
});
const available = stock > 0;
console.log("updated=" + updated);
console.log("available=" + available);
stock ← 5, updated ← {"item":"pen","stock":5}, available ← true
1const stock→ 5 = 5; //@stock=0, 122const updated→ {"item":"pen","stock":5} = JSON.stringify({3 ...{ item: "pen", stock: 2 },4 stock: stock5,5});6const available→ true = stock→ 5 > 0;78console.log("updated=" + updated{"item":"pen","stock":5});9console.log("available=" + availabletrue);outputupdated={"item":"pen","stock":5} available=true
stock ← 0, updated ← {"item":"pen","stock":0}, available ← false
1const stock→ 0 = 0;2const updated→ {"item":"pen","stock":0} = JSON.stringify({3 ...{ item: "pen", stock: 2 },4 stock: stock0,5});6const available→ false = stock→ 0 > 0;78console.log("updated=" + updated{"item":"pen","stock":0});9console.log("available=" + availablefalse);outputupdated={"item":"pen","stock":0} available=false
stock ← 12, updated ← {"item":"pen","stock":12}, available ← true
1const stock→ 12 = 12;2const updated→ {"item":"pen","stock":12} = JSON.stringify({3 ...{ item: "pen", stock: 2 },4 stock: stock12,5});6const available→ true = stock→ 12 > 0;78console.log("updated=" + updated{"item":"pen","stock":12});9console.log("available=" + availabletrue);outputupdated={"item":"pen","stock":12} available=true