Arrays and Iteration
Iterating Object Keys
Walk an object's keys and read its values.
object-keys
`Object.keys` returns an array of an object's property names. Looping those keys reads each value, here summing them into a total.
Iterating Object Keys
object_keys.js
Replay: real traced execution (multi-file project)
const bonus = 0;
const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });
let total = 0;
for (const k of keys) {
const price = ({ pen: 2, pad: 5, ink: 8 })[k];
total += price + bonus;
}
console.log("count=" + keys.length);
console.log("total=" + total);
const bonus = 10;
const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });
let total = 0;
for (const k of keys) {
const price = ({ pen: 2, pad: 5, ink: 8 })[k];
total += price + bonus;
}
console.log("count=" + keys.length);
console.log("total=" + total);
const bonus = 100;
const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });
let total = 0;
for (const k of keys) {
const price = ({ pen: 2, pad: 5, ink: 8 })[k];
total += price + bonus;
}
console.log("count=" + keys.length);
console.log("total=" + total);
bonus ← 0
1const bonus→ 0 = 0; //@bonus=10, 1002const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });keys ← pen,pad,ink
1const bonus = 0; //@bonus=10, 1002const keys→ pen,pad,ink = Object.keys({ pen: 2, pad: 5, ink: 8 });3let total = 0;total ← 0
1const bonus = 0; //@bonus=10, 1002const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });3let total→ 0 = 0;4for (const k of keys) {price ← 2, ({ pen: 2, pad: 5, ink: 8 })[k] ← 2
3let total = 0;4for (const k of keys) {5 const price→ 2 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 2;6 total += price + bonus;values this steppenktotal ← 2, price ← 2
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 2 + bonus0;7}values this step2totalprice ← 5, ({ pen: 2, pad: 5, ink: 8 })[k] ← 5
3let total = 0;4for (const k of keys) {5 const price→ 5 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 5;6 total += price + bonus;values this steppadktotal ← 7, price ← 5
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 5 + bonus0;7}values this step7totalprice ← 8, ({ pen: 2, pad: 5, ink: 8 })[k] ← 8
3let total = 0;4for (const k of keys) {5 const price→ 8 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 8;6 total += price + bonus;values this stepinkktotal ← 15, price ← 8
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 8 + bonus0;7}values this step15totalconsole.log("count=" + keys.length);
6 total += price + bonus;7}89console.log("count=" + keys.length3);10console.log("total=" + total);outputcount=3console.log("total=" + total);
9console.log("count=" + keys.length);10console.log("total=" + total15);outputtotal=15
bonus ← 10
1const bonus→ 10 = 10;2const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });keys ← pen,pad,ink
1const bonus = 10;2const keys→ pen,pad,ink = Object.keys({ pen: 2, pad: 5, ink: 8 });3let total = 0;total ← 0
1const bonus = 10;2const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });3let total→ 0 = 0;4for (const k of keys) {price ← 2, ({ pen: 2, pad: 5, ink: 8 })[k] ← 2
3let total = 0;4for (const k of keys) {5 const price→ 2 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 2;6 total += price + bonus;values this steppenktotal ← 12, price ← 2
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 2 + bonus10;7}values this step12totalprice ← 5, ({ pen: 2, pad: 5, ink: 8 })[k] ← 5
3let total = 0;4for (const k of keys) {5 const price→ 5 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 5;6 total += price + bonus;values this steppadktotal ← 27, price ← 5
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 5 + bonus10;7}values this step27totalprice ← 8, ({ pen: 2, pad: 5, ink: 8 })[k] ← 8
3let total = 0;4for (const k of keys) {5 const price→ 8 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 8;6 total += price + bonus;values this stepinkktotal ← 45, price ← 8
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 8 + bonus10;7}values this step45totalconsole.log("count=" + keys.length);
6 total += price + bonus;7}89console.log("count=" + keys.length3);10console.log("total=" + total);outputcount=3console.log("total=" + total);
9console.log("count=" + keys.length);10console.log("total=" + total45);outputtotal=45
bonus ← 100
1const bonus→ 100 = 100;2const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });keys ← pen,pad,ink
1const bonus = 100;2const keys→ pen,pad,ink = Object.keys({ pen: 2, pad: 5, ink: 8 });3let total = 0;total ← 0
1const bonus = 100;2const keys = Object.keys({ pen: 2, pad: 5, ink: 8 });3let total→ 0 = 0;4for (const k of keys) {price ← 2, ({ pen: 2, pad: 5, ink: 8 })[k] ← 2
3let total = 0;4for (const k of keys) {5 const price→ 2 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 2;6 total += price + bonus;values this steppenktotal ← 102, price ← 2
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 2 + bonus100;7}values this step102totalprice ← 5, ({ pen: 2, pad: 5, ink: 8 })[k] ← 5
3let total = 0;4for (const k of keys) {5 const price→ 5 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 5;6 total += price + bonus;values this steppadktotal ← 207, price ← 5
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 5 + bonus100;7}values this step207totalprice ← 8, ({ pen: 2, pad: 5, ink: 8 })[k] ← 8
3let total = 0;4for (const k of keys) {5 const price→ 8 = ({ pen: 2, pad: 5, ink: 8 })[k]→ 8;6 total += price + bonus;values this stepinkktotal ← 315, price ← 8
4for (const k of keys) {5 const price = ({ pen: 2, pad: 5, ink: 8 })[k];6 total += price→ 8 + bonus100;7}values this step315totalconsole.log("count=" + keys.length);
6 total += price + bonus;7}89console.log("count=" + keys.length3);10console.log("total=" + total);outputcount=3console.log("total=" + total);
9console.log("count=" + keys.length);10console.log("total=" + total315);outputtotal=315
Follow the Keys
Object.keysreturnspen,pad, andink.- The matching prices are
2,5, and8. - The default
bonusis0. - Each loop pass adds
price + bonus. - The script prints
count=3andtotal=15. | key | price | added with bonus 0 | | --- | --- | --- | | pen | 2 | 2 | | pad | 5 | 5 | | ink | 8 | 8 | | total | - | 15 |
Exercise: object_keys.js
Reproduce count=3 and total=15, then use the pinned bonus variants 10 and 100 to predict totals 45 and 315.