1. Make an array by [bracketing] some numbers joined by commas, and sum it up:
ages = [13, 5, 7, 2] sum = 0 for n in ages sum += n write 'sum is', sum write 'average is', sum / ages.length
Arrays are sometimes called lists or vectors, and they represent a sequence of data.
The other fundamental data structure is an object. An object is similar to an array, except that it is enclosed by {curly braces}, and it gives a name to each value. Each named value is called a property. A object is sometimes called an map or a dictionary (because it maps keys like "alice" to values like 13).
2. Write the program averaging ages using a map instead of a list:
family = { alice: 13, bob: 5, cal: 7, dee: 2 } sum = count = 0 for name, age of family write name, 'is', age sum += age count += 1 write 'sum is', sum write 'average is', sum / count
In CoffeeScript, the word in is used to loop over a list, and the word of is used to loop over a map.
Names in a map can be quoted so that the name for each value can contain unusual characters like spaces or punctuation:
family = { "alice": 13, "mary-jane": 5, "j r": 5 }
3. Access single property of an
object with a dot family.alice
or with [brackets] family["j r"]:
family = alice: 13 "mary-jane": 5 "j r": 7 write 'alice is', family.alice write 'j r is', family["j r"] family.alice = 14 write 'now alice is', family.alice
In CoffeeScript, you will sometimes see maps written as a block of indented lines. When written this way, the curly braces can be omitted.
4. Arrays also use [brackets] for
access. Acess the first element
of an array with list[0]
,
and access its last element with
list[list.length - 1]
:
list = [13, 5, 7] write 'list has length', list.length write 'first is', list[0] write 'last is', list[list.length - 1] list.push(2) write 'now the last is', list[list.length - 1] write 'list is', list.join('+')
The example also shows how to use
list.push
and
list.join
. Here is a quick
summary of array techniques:
list.length
the length of
the list.
list[0]
the first element
of the list.
list[list.length - 1]
the
last element.
list.push(value)
appends
a value to the end.
list.pop()
removes the last
value (opposite of push).
list.shift(values)
inserts
a value at the beginning.
list.unshift()
removes
the first value (opposte of shift).
list.join(',')
makes
a string joining all the elements with a comma.
5. Arrays and objects can also contain other arays and objects. Try this:
group = alice: age: 13 flavors: ['vanilla', 'chocolate'] bob: age: 5 flavors: ['strawberry', 'vanilla'] cal: age: 7 flavors: ['chocolate'] dee: age: 2 flavors: ['vanilla'] write "Bob's second favorite is", group.bob.flavors[1] votes = {} for name, info of group for flavor in info.flavors if flavor not of votes votes[flavor] = [] votes[flavor].push info.age write info.age, 'year-old:', flavor for flavor, ages of votes write 'ages for', flavor, ':', ages.join(',')
A couple tricky things here:
votes = {}
creates an
empty object called "votes".
Later on, if flavor not of votes
checks
if the votes object does not yet have
a property for a flavor. If so, then
votes[flavor] = []
sets
the property to an empty array,
and votes[flavor].push info.age
adds a new age to the end of the array.
In the end, votes
is an object
that has an array of ages for each flavor.