Here’s how to use JavaScript to calculate incremental increases over time.

Yesterday I wrote about starting the new year focusing on incremental habits that would increase over the period of a year. Here’s how I came to some calculations using JavaScript.

First, I needed to declare some constants:

```
const STARTING_POINT = 1;
const INCREMENT = 1;
const NUMBER_OF_WEEKS = 52;
const DAYS_PER_WEEK = 7;
```

Next, I create an array that has 52 values, each value indicating the week number:

```
let weeks = [];
for (
let index = STARTING_POINT;
index <= NUMBER_OF_WEEKS;
index = index + INCREMENT
) {
weeks.push(index);
}
```

Then I calculate the totals using the Array.reduce method. I’ve always been stumped at what `reduce`

is used for, but it works well for this purpose.

```
const weeklyHabitTotal = weeks.reduce(
(previousValue, currentValue) => previousValue + currentValue
);
const dailyHabitTotal = weeks.reduce(
(previousValue, currentValue) => previousValue + currentValue * DAYS_PER_WEEK
);
```

## Weekly habits

The `weeklyHabitTotal`

calculates the total units of measure (e.g. minutes, pushups, potato chips eaten, etc.) that would be accumulated over a year. So suppose I wanted to ride my bike every week, I would start with one measly mile:

- Week 1: Ride 1 mile
- Week 2: Ride 2 miles
- …
- Week 52: Ride 52 miles.

At the end of a year, if I faithfully do this, I should complete 1,378 miles by the end of the year. That’s a significant improvement over the 200 miles I logged on Strava before falling in mid-2023.

## Daily habits

To calculate daily habits, the only difference is that I do the habit every single day, but still increase by one every week. So if I decide to walk my dog for X number of minutes:

- Week 1: Walk dog for 1 minute every day
^{1}. - …
- Week 20: Walk dog for 20 minutes every day.
- …
- Week 52: Walk dog for 52 minutes.

At the end of the year, I would have walked him for 9,640 minutes or nearly 160 hours.

- Technically, our dog won’t let me just walk him for one minute, but it’s supposed to be a starting point. ↩︎