Foundations
Arrays
Typed arrays store a sequence of values and keep element operations predictable.
typed array
An annotation such as `number[]` says every element should be a number.
Arrays
arrays.ts
Replay: real traced execution (multi-file project)
const scores: number[] = [82, 91, 76];
scores.push(88);
let total: number = 0;
for (const score of scores) {
total += score;
}
const average: number = total / scores.length;
console.log(`Scores: ${scores.join(", ")}`);
console.log(`Average: ${average}`);
const scores: number[] = [100, 95, 90];
scores.push(88);
let total: number = 0;
for (const score of scores) {
total += score;
}
const average: number = total / scores.length;
console.log(`Scores: ${scores.join(", ")}`);
console.log(`Average: ${average}`);
const scores: number[] = [60, 70, 80];
scores.push(88);
let total: number = 0;
for (const score of scores) {
total += score;
}
const average: number = total / scores.length;
console.log(`Scores: ${scores.join(", ")}`);
console.log(`Average: ${average}`);
scores ← 82,91,76
1const scores→ 82,91,76: number[] = [82, 91, 76]; //@scores=[100, 95, 90], [60, 70, 80]2scores.push(88);//@scores=[100, 95, 90], [60, 70, 80] scores ← 82,91,76,88
1const scores: number[] = [82, 91, 76]; //@scores=[100, 95, 90], [60, 70, 80]2scores.push(88);values this step82,91,76 → 82,91,76,88//@scores=[100, 95, 90], [60, 70, 80] scorestotal ← 0
1const scores: number[] = [82, 91, 76]; //@scores=[100, 95, 90], [60, 70, 80]2scores.push(88);34let total→ 0: number = 0;5for (const score of scores) {total ← 82
4let total: number = 0;5for (const score of scores) {6 total += score82;7}values this step82totaltotal ← 173
4let total: number = 0;5for (const score of scores) {6 total += score91;7}values this step173totaltotal ← 249
4let total: number = 0;5for (const score of scores) {6 total += score76;7}values this step249totaltotal ← 337
4let total: number = 0;5for (const score of scores) {6 total += score88;7}values this step337totalaverage ← 84.25, total ← 337
6 total += score;7}89const average→ 84.25: number = total→ 337 / scores.length4;10console.log(`Scores: ${scores.join(", ")}`);console.log(`Scores: ${scores.join(", ")}`);
9const average: number = total / scores.length;10console.log(`Scores: ${scores82,91,76,88.join(", ")}`);11console.log(`Average: ${average}`);outputScores: 82, 91, 76, 88console.log(`Average: ${average}`);
9const average: number = total / scores.length;10console.log(`Scores: ${scores.join(", ")}`);11console.log(`Average: ${average84.25}`);outputAverage: 84.25
scores ← 100,95,90
1const scores→ 100,95,90: number[] = [100, 95, 90];2scores.push(88);scores ← 100,95,90,88
1const scores: number[] = [100, 95, 90];2scores.push(88);values this step100,95,90 → 100,95,90,88scorestotal ← 0
1const scores: number[] = [100, 95, 90];2scores.push(88);34let total→ 0: number = 0;5for (const score of scores) {total ← 100
4let total: number = 0;5for (const score of scores) {6 total += score100;7}values this step100totaltotal ← 195
4let total: number = 0;5for (const score of scores) {6 total += score95;7}values this step195totaltotal ← 285
4let total: number = 0;5for (const score of scores) {6 total += score90;7}values this step285totaltotal ← 373
4let total: number = 0;5for (const score of scores) {6 total += score88;7}values this step373totalaverage ← 93.25, total ← 373
6 total += score;7}89const average→ 93.25: number = total→ 373 / scores.length4;10console.log(`Scores: ${scores.join(", ")}`);console.log(`Scores: ${scores.join(", ")}`);
9const average: number = total / scores.length;10console.log(`Scores: ${scores100,95,90,88.join(", ")}`);11console.log(`Average: ${average}`);outputScores: 100, 95, 90, 88console.log(`Average: ${average}`);
9const average: number = total / scores.length;10console.log(`Scores: ${scores.join(", ")}`);11console.log(`Average: ${average93.25}`);outputAverage: 93.25
scores ← 60,70,80
1const scores→ 60,70,80: number[] = [60, 70, 80];2scores.push(88);scores ← 60,70,80,88
1const scores: number[] = [60, 70, 80];2scores.push(88);values this step60,70,80 → 60,70,80,88scorestotal ← 0
1const scores: number[] = [60, 70, 80];2scores.push(88);34let total→ 0: number = 0;5for (const score of scores) {total ← 60
4let total: number = 0;5for (const score of scores) {6 total += score60;7}values this step60totaltotal ← 130
4let total: number = 0;5for (const score of scores) {6 total += score70;7}values this step130totaltotal ← 210
4let total: number = 0;5for (const score of scores) {6 total += score80;7}values this step210totaltotal ← 298
4let total: number = 0;5for (const score of scores) {6 total += score88;7}values this step298totalaverage ← 74.5, total ← 298
6 total += score;7}89const average→ 74.5: number = total→ 298 / scores.length4;10console.log(`Scores: ${scores.join(", ")}`);console.log(`Scores: ${scores.join(", ")}`);
9const average: number = total / scores.length;10console.log(`Scores: ${scores60,70,80,88.join(", ")}`);11console.log(`Average: ${average}`);outputScores: 60, 70, 80, 88console.log(`Average: ${average}`);
9const average: number = total / scores.length;10console.log(`Scores: ${scores.join(", ")}`);11console.log(`Average: ${average74.5}`);outputAverage: 74.5
Follow the Scores
scoresstarts as[82, 91, 76].scores.push(88)adds88at the end.- The loop adds all four scores into
total. totalis337.averageis337 / 4, so the program printsAverage: 84.25. | step | value | | --- | --- | | starting scores | 82, 91, 76 | | after push | 82, 91, 76, 88 | | total | 337 | | average | 84.25 | | starting scores | after push | total | average | | --- | --- | --- | --- | | 100, 95, 90 | 100, 95, 90, 88 | 373 | 93.25 | | 82, 91, 76 | 82, 91, 76, 88 | 337 | 84.25 | | 60, 70, 80 | 60, 70, 80, 88 | 298 | 74.5 |
Exercise: arrays.ts
Reproduce the default scores and average, then try one listed starting score set and predict the total and average.