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

scores
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}`);
  1. scores ← 82,91,76

    1const scores→ 82,91,76: number[] = [82, 91, 76];  //@scores=[100, 95, 90], [60, 70, 80]2scores.push(88);
  2. //@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] scores
  3. total ← 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) {
  4. total ← 82

    4let total: number = 0;5for (const score of scores) {6    total += score82;7}
    values this step82total
  5. total ← 173

    4let total: number = 0;5for (const score of scores) {6    total += score91;7}
    values this step173total
  6. total ← 249

    4let total: number = 0;5for (const score of scores) {6    total += score76;7}
    values this step249total
  7. total ← 337

    4let total: number = 0;5for (const score of scores) {6    total += score88;7}
    values this step337total
  8. average ← 84.25, total ← 337

    6    total += score;7}89const average→ 84.25: number = total→ 337 / scores.length4;10console.log(`Scores: ${scores.join(", ")}`);
  9. 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, 88
  10. console.log(`Average: ${average}`);

    9const average: number = total / scores.length;10console.log(`Scores: ${scores.join(", ")}`);11console.log(`Average: ${average84.25}`);
    outputAverage: 84.25
  1. scores ← 100,95,90

    1const scores→ 100,95,90: number[] = [100, 95, 90];2scores.push(88);
  2. scores ← 100,95,90,88

    1const scores: number[] = [100, 95, 90];2scores.push(88);
    values this step100,95,90 100,95,90,88scores
  3. total ← 0

    1const scores: number[] = [100, 95, 90];2scores.push(88);34let total→ 0: number = 0;5for (const score of scores) {
  4. total ← 100

    4let total: number = 0;5for (const score of scores) {6    total += score100;7}
    values this step100total
  5. total ← 195

    4let total: number = 0;5for (const score of scores) {6    total += score95;7}
    values this step195total
  6. total ← 285

    4let total: number = 0;5for (const score of scores) {6    total += score90;7}
    values this step285total
  7. total ← 373

    4let total: number = 0;5for (const score of scores) {6    total += score88;7}
    values this step373total
  8. average ← 93.25, total ← 373

    6    total += score;7}89const average→ 93.25: number = total→ 373 / scores.length4;10console.log(`Scores: ${scores.join(", ")}`);
  9. 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, 88
  10. console.log(`Average: ${average}`);

    9const average: number = total / scores.length;10console.log(`Scores: ${scores.join(", ")}`);11console.log(`Average: ${average93.25}`);
    outputAverage: 93.25
  1. scores ← 60,70,80

    1const scores→ 60,70,80: number[] = [60, 70, 80];2scores.push(88);
  2. scores ← 60,70,80,88

    1const scores: number[] = [60, 70, 80];2scores.push(88);
    values this step60,70,80 60,70,80,88scores
  3. total ← 0

    1const scores: number[] = [60, 70, 80];2scores.push(88);34let total→ 0: number = 0;5for (const score of scores) {
  4. total ← 60

    4let total: number = 0;5for (const score of scores) {6    total += score60;7}
    values this step60total
  5. total ← 130

    4let total: number = 0;5for (const score of scores) {6    total += score70;7}
    values this step130total
  6. total ← 210

    4let total: number = 0;5for (const score of scores) {6    total += score80;7}
    values this step210total
  7. total ← 298

    4let total: number = 0;5for (const score of scores) {6    total += score88;7}
    values this step298total
  8. average ← 74.5, total ← 298

    6    total += score;7}89const average→ 74.5: number = total→ 298 / scores.length4;10console.log(`Scores: ${scores.join(", ")}`);
  9. 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, 88
  10. console.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

  1. scores starts as [82, 91, 76].
  2. scores.push(88) adds 88 at the end.
  3. The loop adds all four scores into total.
  4. total is 337.
  5. average is 337 / 4, so the program prints Average: 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.