hajim urcs
Computer Science @ Rochester

DMS102/CSC170D: Introduction to Web Development
Spring 2013

Assignment 7: Arrays and Objects

1. Arrays

  1. [4 pts] Write your own version of the Javascript Array method indexOf. That is, write a function that takes as parameters an array and a value and returns the index of the first element that is equal to the value, or -1 if the value is not one of the elements in the array.

    Demonstrate your function on a page that asks the user for a color name and returns the index of that color in an array containing the 17 predefined CSS color names (in row order top-to-bottom, then left-to-right within a row).

  2. [4 pts] Write a method that returns a copy of given array. That is, your function should take one parameter, an array, and return an array with exactly the same elements in it (but not the same array itself). That is the following is not correct:
            function copyArray(a) {
    	    return a;
            }
        
  3. [4 pts] Write a function that computes and returns the average (mean) of an array of numeric values. Do not use Math or other builtin functions. Demonstrate your function on a page using the following values:
          59 74 76 26 86 89 21 74 39 83
        
  4. [4 pts] Write a function that computes the maximum and minimum values in an array of numbers, and returns both values as an array in that order. Do not use Math or other builtin functions. Demonstrate your function on a page using the following values:
          89 -35 11 -14 -31 -40 73 -40 -29 -81 
        

2. Objects

  1. [5 pts] Javascript has a built-in Date object, but it really doesn't have many useful methods. Let's build our own.
    1. Create a constructor for a kind of object named CalendarDate. It should take three parameters: the day, month, and year of the date it represents and store them in the constructed object instance.
    2. Add a method isChristmas() that tests whether a CalendarDate is Christmas Day (December 25). A test method like this always returns a boolean value (true or false).
    3. Add a method next() that increments a CalendarDate instance to the next day. Note that it is not enough to simply increment the day field. Watch for special cases.
    4. Add a method previous() that decrements a CalendarDate instance.
    5. Add a method increment(n) that increments a CalendarDate by the given number of days. Note that n can be positive, negative (in which case it means decrement), or even zero.
    Demonstrate each of the aspects of your CalendarDate object with reasonable output to the page's document.
  2. [5 pts] We often need to represent people and the relationships between them in our programs. So let's do that.
    1. Create a constructor for a Person object. It should take two parameters: the person's first and last names and store them in the constructed object instance. It should also setup additional properties named bestFriend, and friends. The first of these will hold a reference to a Person object representing the person's best friend. The latter should be an array that will hold references to other Person objects representing all the person's friends. Initialize these appropriately in your constructor.
    2. Add a method setBestFriend(person) that takes as argument a (reference to a) Person object and makes it the bestFriend of the Person object on which the method is invoked.
    3. Add a method addFriend(person) that adds its argument (another Person object) to the array of friends of the Person object on which the method is invoked.
    4. Let's assume that being friends (and of course best friends) is reciprocal (reflexive in mathematical terms). In other words, if I'm your friend then you're my friend, and vice-versa. Adjust your methods to maintain the reciprocal relationships.
    Demonstrate each of the aspects of your Person object with reasonable output to the page's document.

    Note: You may need some methods for printing the contents of the arrays, if the defaults don't look good. Don't forget Array.join in this context.

Things to think about

Last update: Monday, 01-Apr-2013 10:21:52 EDT