Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

answers #3

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions exercises.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,45 @@ function multiplyArguments() {
//use the arguments keyword to multiply all of the arguments together and return the product
//if no arguments are passed in return 0
//if one argument is passed in just return it
var multi = 1;
if (arguments.length === 0) return 0;
for (var i = 0; i < arguments.length; i++) {
multi *= arguments[i];
}
return multi;
}

function invokeCallback(cb) {
//invoke cb
cb();
}

function sumArray(numbers, cb) {
//sum up all of the integers in the numbers array
//pass the result to cb
//no return is necessary
var sum = 0;
for (var i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
cb(sum);
}

function forEach(arr, cb) {
//iterate over arr and pass its values to cb one by one
//hint: you will be invoking cb multiple times (once for each value in the array)
arr.forEach(function (value) {cb(value);});
}

function map(arr, cb) {
//create a new array
//iterate over each value in arr, pass it to cb, then place the value returned from cb into the new arr
//the new array should be the same length as the array argument
var array = [];
for (var i = 0; i < arr.length; i++) {
array.push(cb(arr[i]));
}
return array;
}

function getUserConstructor() {
Expand All @@ -36,25 +54,44 @@ function getUserConstructor() {
//the constructor should have a method 'sayHi' on its prototype that returns the string 'Hello, my name is {{name}}'
//{{name}} should be the name set on each instance
//return the constructor
function User (options){
this.username = options.username;
this.name = options.name;
this.email = options.email;
this.password = options.password;
this.sayHi = function(){
return 'Hello, my name is ' + this.name;} ;
}
return User;
}

function addPrototypeMethod(Constructor) {
//add a method to the constructor's prototype
//the method should be called 'sayHi' and should return the string 'Hello World!'
Constructor.prototype.sayHi = function () {
return 'Hello World!';
};
}

function addReverseString() {
//add a method to the string constructor's prototype that returns a reversed copy of the string
//name this method reverse
//hint:
//you will need to use 'this' inside of reverse
String.prototype.reverse = function () {
return this.split('').reverse().join('');
};
}

function nFactorial(n) {
//return the factorial for n
//solve this recursively
//example:
//the factorial of 3 is 6 (3 * 2 * 1)
if (n === 0) {
return 1;
}
return n * nFactorial(n-1);
}

function cacheFunction(cb) {
Expand All @@ -69,6 +106,17 @@ function cacheFunction(cb) {
//if the function you return is invoked with 5 it would pass 5 to cb(5) and return 25
//if the function you return is invoked again with 5 it will look on an object in the closure scope
//and return 25 directly and will not invoke cb again
var cashe = [];
return (
function(arg) {
if (cashe.hasOwnProperty(arg)) {
return cashe[arg];
}else {
cashe[arg] = cb(arg);
return cashe[arg];
}
}
);
}


Expand Down