Adobe
Products

Top destinations

  • Adobe Creative Cloud
  • Creative Suite
  • Adobe Marketing Cloud
  • Acrobat
  • Photoshop
  • SiteCatalyst
  • Students
  • Elements family

Adobe Creative Cloud

  • What is Adobe Creative Cloud?
  • Design
  • Web
  • Photography
  • Video
  • Students
  • Teams
  • Enterprise
  • Educational institutions

Design and photography

  • Photoshop
  • Illustrator
  • InDesign
  • Adobe Muse
  • Lightroom

Video

  • Adobe Premiere
  • After Effects

Web development and HTML5

  • Edge Tools & Services [opens in a new window]
  • Dreamweaver
  • Gaming [opens in a new window]

Adobe Marketing Cloud

  • What is Adobe Marketing Cloud?
  • Digital analytics
  • Social marketing
  • Web experience management
  • Testing and targeting
  • Media optimization

Analytics

  • SiteCatalyst
  • Adobe Discover
  • Insight

Social

  • Adobe Social

Experience Manager

  • CQ
  • Scene7

Target

  • Test&Target
  • Recommendations
  • Search&Promote

Media Optimizer

  • AdLens
  • AudienceManager
  • AudienceResearch

Document services

  • Acrobat
  • EchoSign [opens in a new window]
  • FormsCentral [opens in a new window]
  • SendNow [opens in a new window]
  • Acrobat.com [opens in a new window]

Publishing

  • Digital Publishing Suite

  • See all products
Business solutions

By business need

  • Digital analytics
  • Digital publishing
  • Document management
  • Media optimization
  • Social marketing
  • Testing and targeting
  • Video editing and serving
  • Web development [opens in a new window]
  • Web experience management
  • See all business needs

By industry

  • Broadcast
  • Education
  • Financial services
  • Government
  • Publishing
  • Retail
  • See all industries
Support & Learning

I need help

  • Products
  • Adobe Creative Cloud
  • Adobe Marketing Cloud
  • Forums [opens in a new window]

I want to learn

  • Training and tutorials
  • Certification [opens in a new window]
  • Adobe Developer Connection
  • Adobe Design Center
  • Adobe TV [opens in a new window]
  • Adobe Marketing Center
  • Adobe Labs [opens in a new window]
Download
  • Product trials
  • Adobe Flash Player
  • Adobe Reader
  • Adobe AIR
  • See all downloads
Company
  • Careers at Adobe
  • Investor Relations
  • Newsroom
  • Privacy
  • Corporate Social Responsibility
  • Customer Showcase
  • Contact us
  • More company info
Buy
  • For personal and professional use
  • For students, educators, and staff
  • For small and medium businesses
  • Volume Licensing
  • Special offers
  • Adobe Marketing Cloud sales [opens in a new window]
Search
 
Info Sign in
Why sign in? Sign in to manage your account and access trial downloads, product extensions, community areas, and more.
Welcome,
My Adobe
My orders
My information
My preferences
My products and services
Sign out
My cart
Privacy My Adobe
Adobe
Products Sections Buy   Search  
Solutions Company
Help Learning
Sign in Sign out Privacy My Adobe
Preorder Estimated Availability Date. Your credit card will not be charged until the product is shipped. Estimated availability date is subject to change. Preorder Estimated Availability Date. Your credit card will not be charged until the product is ready to download. Estimated availability date is subject to change.
Qty:
Purchase requires verification of academic eligibility
Subtotal
Promotions
Estimated shipping
Tax
Calculated at checkout
Total
Review and Checkout
Adobe Developer Connection / ActionScript Technology Center / Learning ActionScript 3 /

ActionScript 3 fundamentals: Arrays

by Michelle Yaiser

Michelle Yaiser
  • Adobe
  • michelleyaiser.com

Content

  • Creating arrays
  • Manipulating data in arrays
  • Sorting arrays
  • Homogeneous, heterogeneous and sparse
  • Multidimensional arrays
  • Looping over arrays
  • Where to go from here

Created

24 October 2011

Page tools

Share on Facebook
Share on Twitter
Share on LinkedIn
Bookmark
Print
ActionScriptAdobe AIRarraysFlash BuilderFlash PlayerFlash Professional
Was this helpful?
Yes   No

By clicking Submit, you accept the Adobe Terms of Use.

 
Thanks for your feedback.

Requirements

Prerequisite knowledge

You need to be familiar with ActionScript 3 variables, data types, operators, objects, and loops.

User level

Beginning

Required products

  • Flash Builder (Download trial)
  • Flash Professional (Download trial)

As you continue to learn ActionScript 3 and implement larger and more complicated applications, the way in which you store and retrieve data becomes increasingly important. While you have stored data in individual variables, or as related properties of objects, more complex problems call for a variety of solutions.

This article introduces arrays. Arrays are one of the simplest data structures, or ways of storing data in a computer. Arrays work by storing a given piece of data, called an element, at an index. That index can then be used for retrieving or altering the data later. Arrays can grow or shrink in size over time as you add or remove elements.

Creating arrays

Arrays are objects. As such, they must be instantiated and assigned to reference variables. Then you use the reference variable and dot syntax to access an array's properties, methods, and elements. The following code instantiates an empty array:

var myArray:Array = new Array();

All ActionScript 3 arrays have a length property. That length property corresponds to the number of elements stored in the array at any given time. Executing the code below will show that the array currently has 0 elements.

var myArray:Array = new Array(); trace(myArray.length); //0

Once in a while you will know the number of elements needed for an array before you create it. For example, if you were going to create an array to hold every day of the week, you would know that the array only needs to hold seven elements. You would instantiate an array, passing it an integer to specify the number of elements.

var days:Array = new Array( 7 ); trace(days.length); //7

The code above creates an array with seven places to be defined in the future. It can be helpful to think of an array as having a number of slots (or indexes) that hold each piece of data. So, an array of seven items could be visualized as:

fig01

Although data is usually added to arrays after they are created, it is possible to instantiate an array with initial elements.

var days:Array = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); trace( days.length ); //7
fig02

If you only provide one value, and the value is a number, it is interpreted as a length.

Finally, it is possible to instantiate an array by assigning it a literal value using a special shortcut syntax. In ActionScript 3 square brackets [ ] are often associated with arrays.

var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; trace( days.length ); //7

You can create an empty array in the following way:

var elements:Array = [];

Regardless of which way you create or populate the array, you will end up with an identical data structure containing your values.

Manipulating data in arrays

Data can be added and removed from ActionScript 3 arrays at runtime. You can replace existing array elements or shrink or grow the array as needed. There are a number of methods available in the Array class to manipulate data in an array, but only the most commonly used methods will be discussed here.

push() and pop() methods

The first method is the push() method of the Array class. The push() method adds one or more new elements to the end of an array. The method returns the new length of the array after the new item(s) have been added.

var letters:Array = new Array() letters.push( "C" );

fig03
letters.push( "D", "E", "F" );

fig04
var lettersArrayLength:uint = letters.push( "G" ); trace(lettersArrayLength); //5 trace(letters.length); //5


fig05

Items can be removed from the end of an array with the pop() method. The pop() method removes one element from the end of an array and returns it. Look at the following example:

var letters:Array = new Array(); letters.push( "C" ); letters.push( "D" ); var letter:String = letters.pop(); trace(letter); //D letters.push( "E" ); trace(letters); //C, E

For those of you familiar with a Stack data structure, the push() and pop() methods provide an easy way to implement it using an array in ActionScript 3.

Index

While adding data with push() and removing it with pop() is an effective way to manipulate the end of an array, arrays are most commonly manipulated and accessed via index. In ActionScript 3, an array's index begins at 0, meaning the first element of the array is the 0th element.

Individual values of the array are accessed by using the name of the array, followed by square brackets and the index you wish to retrieve. For example:

var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; trace(days[1]); //Mon

You can think about the array in the code above as looking like this:

fig06

You can also use this same technique to modify the contents of an Array. For example, you could modify the string 'Thu' to say 'Hi".

var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; days[4] = "Hi";
fig07

Because array indexes are 0-based, the last element of the array is always one less than the length. That means if you have an array of length 7, then the last element of the array is at index 6.

You can also use the index to populate data, just as you did with the push() method.

var days:Array = new Array(); days[ 0 ] = "Sun"; days[ 1 ] = "Mon";

shift() unshift() and splice() methods

Elements can also be removed from the beginning of an array with the shift() method. By using shift(), you can use an array as a queue. The shift() method removes the element from the first indexed location and returns it. The remaining elements are moved from their original index location i to i-1

var queueArray:Array = new Array("one", "two", "three", "four"); var wasInArray:String = queueArray.shift(); trace(wasInArray); //one trace(queueArray); //two, three, four

You can also add elements to the beginning of an array using the unshift(…args) method. The remaining elements are moved from their original index location of i to i+1

var arrayToUnshift:Array = new Array("three", "four"); arrayToUnshift.unshift("two"); trace(arrayToUnshift); // two, three, four arrayToUnshift.unshift("zero", "one"); trace(arrayToUnshift); //zero, one, two, three, four

Finally, the splice() method allows you to insert data into or remove data from an array at someplace other than the first or last index locations. When using splice() to add data, elements are moved within the array to make room for the inserted data. When using splice() to remove data, elements are moved to fill in the empty space left after removal. When you call the splice() method, you specify three arguments:

  • the index location to insert data into
  • how many (if any) elements to the right of the insertion index should be deleted
  • data to be inserted (optional)
var spliceArray:Array = ["do", "re", "fa", "fa", "so", "la", "ti", "do"]; spliceArray.splice(2, 0, "mi"); trace(spliceArray); // do, re, mi, fa, fa, so, la, ti, do spliceArray.splice(4, 1); trace(spliceArray); // do, re, mi, fa, so, la, ti, do

Sorting arrays

You can sort the data in an array. By default the sort() method is ascending (a-z), case sensitive (Z comes before a), and treats all data as strings. Treating all data as strings means that numerical data will be incorrectly sorted—100 will come before 4.

You can pass the sort method arguments to affect how it sorts.

Array.CASEINSENSITIVE Array.DESCENDING Array.UNIQUESORT - throws a false if two elements are identical Array.RETURNINDEXEDARRAY Array.NUMERIC

Look at how array data is sorted in the examples below.

var stringArrayToSort:Array = new Array("apple", "Zebra", "Orange", "raspberry", "blueberry"); stringArray.sort(); trace(stringArrayToSort); // Orange, Zebra, apple, blueberry, raspberry stringArrayToSort.sort(Array.DESCENDING); trace(stringArrayToSort); // raspberry, blueberry, apple, Zebra, Orange stringArrayToSort.sort(Array.CASEINSENSITIVE); trace(stringArrayToSort); //apple, blueberry, Orange, raspberry, Zebra var numberArray:Array = [4, 59, 100, 12, 38]; numberArray.sort(); trace(numberArray); //100, 12, 38, 4, 59 numberArray.sort(Array.NUMERIC); trace(numberArray); //4, 12, 38, 59, 100

For more advanced sorting or sorting of complex arrays you can either write a function to help the sort() method or use the sortOn() method.

Homogeneous, heterogeneous and sparse

So far all of the arrays you have seen in this article have been homogenous in that they have contained the same type of data in every element of the Array. This is fairly common; however, it is not a requirement of ActionScript 3 arrays. It is perfectly legal to add elements of varied types to an array. The code below creates a heterogeneous array.

var elements:Array = ["Hello", 1.23, new Date()];
fig08

Up to this point, the arrays in this article can be referred to as dense arrays. This means that every element has some form of value present. ActionScript 3 also supports sparse arrays. Sparse arrays have missing elements. The code below creates a sparse array, as illustrated by the graphic that follows it.

var elements:Array = new Array(); elements[ 0 ] = "A"; elements[ 1 ] = "B"; elements[ 3 ] = "C"; elements[ 4 ] = "D"; elements[ 6 ] = "E";
fig09

Note that there are elements at indexes 0,1,3,4 and 6. The other positions do not exist in this array. If you were to execute the following line of code on this array:

trace(elements[ 2 ]); //undefined

you would receive an undefined as your output. Sparse arrays can be very convenient. However, it is important to note that sparse arrays are significantly slower at runtime. They lack the significant optimization that the Flash Player can provide to regular arrays which are in a simple fixed order.

Also note that this is different than an array with null values:

var elements:Array = new Array(); elements[ 0 ] = "A"; elements[ 1 ] = "B"; elements[ 2 ] = null; elements[ 3 ] = "C"; elements[ 4 ] = "D"; elements[ 5 ] = null; elements[ 6 ] = "E";
fig10new

When you insert null into indexes 2 and 5 you are creating an array with all 7 positions defined. Two of those 'slots' simply contain a null value. An array with null values is a dense array, not a sparse one.

If you have a sparse array (at least one missing index) and you later fill in each of those missing indexes, Flash Player will begin to treat it as a dense array and the performance will improve.

Multidimensional arrays

You can add any type of object into an ActionScript 3 array, including more arrays. The following code creates a new Array, and for each element, adds a new Array. In this example the [] syntax is used to create new Arrays.

var elements:Array = []; elements[ 0 ] = [ "A", "B", "C" ]; elements[ 1 ] = [ "D", "E", "F" ]; elements[ 3 ] = [ "G", "H", "I" ]; trace( elements[ 0 ][ 0 ] ); //A
fig11

As you can see, the resultant memory structure can be thought of more like a two-dimensional table and elements are accessed using two sets of square brackets.

trace( elements[ 0 ][ 0 ] ); //A

It is possible to nest arrays inside each of these array elements, making three-dimensional (or more) arrays. That practice isn't used very often; however, it is useful to know the capabilities of the language for the times when it might be useful.

Looping over arrays

Using loops with arrays is one of the most common practices in programming. The iteration variable in a for loop can serve as the index for an array, making it easy to iterate through every element in the array. In the code below, the loop will cause the element at each index to be traced.

var musicArray:Array = new Array("do", "re", "mi", "fa", "so"); for (var i:int = 0; i<musicArray.length; i++) { trace(musicArray [i]); } //output do re mi fa so

The example below demonstrates that you can use a loop to alter each element in an array.

var numberArray:Array = [5, 10, 15, 20, 25]; trace(numberArray); for (var j:int = 0; j< numberArray.length; j++){ numberArray [j]+=2; } trace(numberArray); //output of first trace() 5 10 15 20 25 //output of second trace() 7 12 17 22 27

You can also iterate through the elements of an array and search for a given value. The function below shows how you can move through an array element by element and check its value. If the function finds the value, it returns the index of the element in the array. If it fails to find the value, it returns a -1.

function findIndexOfValue( array:Array, value:* ):int { var length:uint = array.length; for(var i:uint=0; i<length; i++) { if(array[i] == value){ return i; } else{ return -1; } } } var elements:Array = []; elements[ 0 ] = [ "A" ]; elements[ 1 ] = [ "B" ]; elements[ 2 ] = [ "C" ]; trace(findIndexOfValue(elements, "C")); //2 trace(findIndexOfValue(elements, "Z")); //-1

Where to go from here

The Array class provides a simple data structure which can be used to rapidly store and retrieve information in ActionScript 3. Arrays are best used when you need to keep items in order and directly indexing those items (being able to go to element 5 or 50) is important.

There are a significant number of additional methods defined by the Array class that can aid you in your day-to-day programming. Please refer to the Array entry in the ActionScript 3.0 Reference for more information on the Array class. You can also learn about more advanced techniques for working with arrays in Associative arrays, maps, and dictionaries and in Vectors and ByteArrays (both coming soon).

More Like This

  • ActionScript 3 fundamentals: Operators
  • ActionScript 3 fundamentals: Packages
  • ActionScript 3 fundamentals: Loops
  • ActionScript 3 fundamentals: Syntax
  • ActionScript 3 fundamentals: Variables
  • ActionScript 3 fundamentals: Data types
  • Garbage collection internals for Flash Player and Adobe AIR
  • AS3 fundamentals: Conditionals
  • ActionScript 3 fundamentals: Functions
  • ActionScript 3 fundamentals: Associative arrays, maps, and dictionaries

Products

  • Adobe Creative Cloud
  • Creative Suite
  • Adobe Marketing Cloud
  • Acrobat
  • Photoshop
  • Digital Publishing Suite
  • Elements family
  • SiteCatalyst
  • For education

Download

  • Product trials
  • Adobe Reader
  • Adobe Flash Player
  • Adobe AIR

Support & Learning

  • Product help
  • Forums

Buy

  • For personal and professional use
  • For students, educators, and staff
  • For small and medium businesses
  • Volume Licensing
  • Special offers

Company

  • News room
  • Partner programs
  • Corporate social responsibility
  • Career opportunities
  • Investor Relations
  • Events
  • Legal
  • Security
  • Contact Adobe
Choose your region United States (Change)
Choose your region Close

North America

Europe, Middle East and Africa

Asia Pacific

  • Canada - English
  • Canada - Français
  • Latinoamérica
  • México
  • United States

South America

  • Brasil
  • Africa - English
  • Österreich - Deutsch
  • Belgium - English
  • Belgique - Français
  • België - Nederlands
  • България
  • Hrvatska
  • Česká republika
  • Danmark
  • Eastern Europe - English
  • Eesti
  • Suomi
  • France
  • Deutschland
  • Magyarország
  • Ireland
  • Israel - English
  • ישראל - עברית
  • Italia
  • Latvija
  • Lietuva
  • Luxembourg - Deutsch
  • Luxembourg - English
  • Luxembourg - Français
  • الشرق الأوسط وشمال أفريقيا - اللغة العربية
  • Middle East and North Africa - English
  • Moyen-Orient et Afrique du Nord - Français
  • Nederland
  • Norge
  • Polska
  • Portugal
  • România
  • Россия
  • Srbija
  • Slovensko
  • Slovenija
  • España
  • Sverige
  • Schweiz - Deutsch
  • Suisse - Français
  • Svizzera - Italiano
  • Türkiye
  • Україна
  • United Kingdom
  • Australia
  • 中国
  • 中國香港特別行政區
  • Hong Kong S.A.R. of China
  • India - English
  • 日本
  • 한국
  • New Zealand
  • 台灣

Southeast Asia

  • Includes Indonesia, Malaysia, Philippines, Singapore, Thailand, and Vietnam - English

Copyright © 2013 Adobe Systems Incorporated. All rights reserved.

Terms of Use | Privacy | Cookies

Ad Choices

Reviewed by TRUSTe: site privacy statement