Let's Count Some Sheep!
Tags: boolean, array, javascript
Published: 2020-02-21 18:03:01

Having trouble falling asleep? It might be time to start counting some sheep. But, instead of counting with numbers, we're going to count the number of times the boolean of true exists in an array. That's right nerds, we're putting a spin on this classic method to help with insomnia. After this, you'll be put to sleep in no time!

So, what's a **boolean** you ask? A boolean is a data type that has one of two possible values, either true or false.

What's an **array**? Well my friends, that's a data structure that consists of a collection of elements, that is identified by it's index value.

So, now imagine we have an array that we're assigning to a variable (called sheep1). Inside this array, we have an array of true and false elements. We're going to have 17 true values and 7 false values. Like this:

```javascript
var sheep1 = [
  true, true, true, false,
  true, true, true, true,
  true, false, true, false,
  true, false, false, true,
  true, true, true, true,
  false, false, true, true
];
```

## Let's get started

Our challenge now is to write a function that is going to return a **Number** that represents the number of times that true was present in the array. So, when we invoke the function, we expect to return 17, which is the number of times that true is present in the array.

There's multiple ways to solve this fun problem, but before we get ahead of ourselves, it would be a good idea to talk through how'd we solve this in plain English, instead of getting caught up in all this computer speak. This is something we like to call, **pseudo coding**. 

To start, we'd like to look at the sheep1 array and find all of the instances of the boolean true. Maybe we create a bucket that we can put these true values into each time we see the word true. Then, at the end we can look at our bucket and count how many true values we have. Okay, now we're ready to start coding!

Follow along with this link to my repl.it (https://repl.it/@michellekaplan7/counting-sheep)

#### Let's start by explaining the simplest way to solve this problem:

  * Let's first created a function called, countSheep
  * Next, we'll declare a variable called count that is assigned the value of 0 to start
  * Then, we'll iterate over the length of the array (this indicates the use of a 'for' loop)
  * Each time we iterate over the array, if the current index of the array equals true, increase the value of our counter by 1
  * Finally, return the value of our count variable, which will be the amount of times the boolean of true was in our array. 

```javascript
function countSheep(array) {
   var count = 0;
   for (var i = 0; i < array.length; i++) {
     if (array[i] === true) {
       count += 1;
       }
     }
     return count;
   }  
```

#### That's too easy you say!? How about another solution!

```javascript
 function countSheep(array) {
   var trueCounter = [];
   for (var i = 0; i < array.length; i++) {
     if (array[i] === true) {
       trueCounter.push(array[i]);
     }
   } return trueCounter.length;
 }
```

In this solution, instead of creating a count variable, we are now declaring a variable called trueCounter assigned to an empty array. This way, each time we iterate over the array, we can use an array prototype (called push()), and "push" that instance of the boolean of true into this new array. Once we've gone through our 'for' loop, we will return the length of this trueCounter array! Pretty cool huh?

#### Still not tough enough for ya? Check this out!

```javascript
function countSheep(array) {
  for (var i = 0; i < array.length; i++) {
    if (array[i] === false) {
      array.splice([i], 1);
    }
  } 
  return array.length;
}
```

With this method of solving the problem, we are using the array prototype of slice(). Effectively, we believed that we could iterate over the array and if the index of the array is false, splice that index of the array off. Then, we could return the length of the array. But, WARNING! This solution doesn't work! 

#### Are you still awake?

Comment below and let's figure out why this last solution doesn't work!