Arrays are generally described as “list-like objects”; they are basically single objects that contain multiple values stored in a list. Array objects can be stored in variables and dealt with in much the same way as any other type of value, the difference being that we can access each value inside the list individually, and do super useful and efficient things with the list, like loop through it and do the same thing to every value. Maybe we’ve got a series of product items and their prices stored in an array, and we want to loop through them all and print them out on an invoice, while totaling all the prices together and printing out the total price at the bottom.
If we didn’t have arrays, we’d have to store every item in a separate variable, then call the code that does the printing and adding separately for each item. This would be much longer to write out, less efficient, and more error-prone. If we had 10 items to add to the invoice it would already be annoying, but what about 100 items, or 1000? We’ll return to this example later on in the article.
As in previous articles, let’s learn about the real basics of arrays by entering some examples into browser developer console.
Arrays consist of square brackets and elements that are separated by commas.
let shopping = ['bread', 'milk', 'cheese', 'hummus', 'noodles']; shopping;
let sequence = [1, 1, 2, 3, 5, 8, 13]; let random = ['tree', 795, [0, 1, 2]];
You can then access individual items in the array using bracket notation, in the same way that you accessed the letters in a string.
shopping[0]; // returns "bread"
shopping[0] = 'tahini'; shopping; // shopping will now return [ "tahini", "milk", "cheese", "hummus", "noodles" ]
random
array (see previous section), we could do something like this:
random[2][2];
You can find out the length of an array (how many items are in it) in exactly the same way as you find out the length (in characters) of a string — by using the length
property. Try the following:
shopping.length; // should return 5
This has other uses, but it is most commonly used to tell a loop to keep going until it has looped through all the items in an array. So for example:
let sequence = [1, 1, 2, 3, 5, 8, 13]; for (let i = 0; i < sequence.length; i++) { console.log(sequence[i]); }
You’ll learn about loops properly later on (in our Looping code article), but briefly, this code is saying:
console.log().In this section we’ll look at some rather useful array-related methods that allow us to split strings into array items and vice versa, and add new items into arrays.
Often you’ll be presented with some raw data contained in a big long string, and you might want to separate the useful items out into a more useful form and then do things to them, like display them in a data table. To do this, we can use the split()
method. In its simplest form, this takes a single parameter, the character you want to separate the string at, and returns the substrings between the separator as items in an array.
Note: Okay, this is technically a string method, not an array method, but we’ve put it in with arrays as it goes well here.
let myData = 'Manchester,London,Liverpool,Birmingham,Leeds,Carlisle';
let myArray = myData.split(','); myArray;
myArray.length; myArray[0]; // the first item in the array myArray[1]; // the second item in the array myArray[myArray.length-1]; // the last item in the array
join()
method. Try the following:
let myNewString = myArray.join(','); myNewString;
toString()
method. toString()
is arguably simpler than join()
as it doesn’t take a parameter, but more limiting. With join()
you can specify different separators, whereas toString()
always uses a comma. (Try running Step 4 with a different character than a comma.)
let dogNames = ['Rocket','Flash','Bella','Slugger']; dogNames.toString(); // Rocket,Flash,Bella,Slugger
We’ve not yet covered adding and removing array items — let us look at this now. We’ll use the myArray
array we ended up with in the last section. If you’ve not already followed that section, create the array first in your console:
let myArray = ['Manchester', 'London', 'Liverpool', 'Birmingham', 'Leeds', 'Carlisle'];
First of all, to add or remove an item at the end of an array we can use push()
and pop()
respectively.
push()
first — note that you need to include one or more items that you want to add to the end of your array. Try this:
myArray.push('Cardiff'); myArray; myArray.push('Bradford', 'Brighton'); myArray;
let newLength = myArray.push('Bristol'); myArray; newLength;
pop()
on it. Try this:
myArray.pop();
let removedItem = myArray.pop(); myArray; removedItem;
unshift()
and shift()
work in exactly the same way as push()
and pop()
, respectively, except that they work on the beginning of the array, not the end.
unshift()
— try the following commands:
myArray.unshift('Edinburgh'); myArray;
shift()
; try these!
let removedItem = myArray.shift(); myArray; removedItem;
Let’s return to the example we described earlier — printing out product names and prices on an invoice, then totaling the prices and printing them at the bottom. In the editable example below there are comments containing numbers — each of these marks a place where you have to add something to the code. They are as follows:
// number 1
comment are a number of strings, each one containing a product name and price separated by a colon. We’d like you to turn this into an array and store it in an array called products
.// number 2
comment is the beginning of a for loop. In this line we currently have i <= 0
, which is a conditional test that causes the for loop to only run once, because it is saying “stop when i
is no longer less than or equal to 0″, and i
starts at 0. We’d like you to replace this with a conditional test that stops the loop when i
is no longer less than the products
array’s length.// number 3
comment we want you to write a line of code that splits the current array item (name:price
) into two separate items, one containing just the name and one containing just the price. If you are not sure how to do this, consult the Useful string methods article for some help, or even better, look at the Converting between strings and arrays section of this article.total
that is created and given a value of 0 at the top of the code. Inside the loop (below // number 4
) we want you to add a line that adds the current item price to that total in each iteration of the loop, so that at the end of the code the correct total is printed onto the invoice. You might need an assignment operator to do this.// number 5
so that the itemText
variable is made equal to “current item name — $current item price”, for example “Shoes — $23.99” in each case, so the correct information for each item is printed on the invoice. This is just simple string concatenation, which should be familiar to you.A good use for array methods like push()
and pop()
is when you are maintaining a record of currently active items in a web app. In an animated scene for example, you might have an array of objects representing the background graphics currently displayed, and you might only want 50 displayed at once, for performance or clutter reasons. As new objects are created and added to the array, older ones can be deleted from the array to maintain the desired number.
In this example we’re going to show a much simpler use — here we’re giving you a fake search site, with a search box. The idea is that when terms are entered in the search box, the top 5 previous search terms are displayed in the list. When the number of terms goes over 5, the last term starts being deleted each time a new term is added to the top, so the 5 previous terms are always displayed.
Note: In a real search app, you’d probably be able to click the previous search terms to return to previous searches, and it would display actual search results! We are just keeping it simple for now.
To complete the app, we need you to:
// number 1
comment that adds the current value entered into the search input to the start of the array. This can be retrieved using searchInput.value
.// number 2
comment that removes the value currently at the end of the array.Let’s start off with some basic array practice. In this task we’d like you to create an array of three items, stored inside a variable called myArray
. The items can be anything you want — how about your favourite foods or bands?
Next, modify the first two items in the array using simple bracket notation and assignment. Then add a new item to the beginning of the array.
Try updating the live code below to recreate the finished example:
Download the starting point for this task to work in your own editor or in an online editor.
Now let’s move on to another task. Here you are provided with a string to work with. We’d like you to:
+
characters in the process. Save the result in a variable called myArray
.arrayLength
.lastItem
.Try updating the live code below to recreate the finished example:
Download the starting point for this task to work in your own editor or in an online editor.
For this final array task, we provide you with a starting array, and you will work in somewhat the opposite direction. You need to:
Ryu (0)
. Note that we don’t teach how to do this in the Arrays article, so you’ll have to do some research.myString
, with a separator of “ -
“.Try updating the live code below to recreate the finished example:
Download the starting point for this task to work in your own editor or in an online editor.
After reading through this article, we are sure you will agree that arrays seem pretty darn useful; you’ll see them crop up everywhere in JavaScript, often in association with loops in order to do the same thing to every item in an array. We’ll be teaching you all the useful basics there are to know about loops in the next module, but for now you should give yourself a clap and take a well-deserved break; you’ve worked through all the articles in this module!
The only thing left to do is work through this module’s assessment, which will test your understanding of the articles that came before it.