Skip to content

Instantly share code, notes, and snippets.

View nickihastings's full-sized avatar
🏠
Working from home

Nicki Hastings nickihastings

🏠
Working from home
View GitHub Profile
@nickihastings
nickihastings / record-collection.js
Created April 4, 2018 20:40
You are given a JSON object representing a part of your musical album collection. Each album has several properties and a unique id number as its key. Not all albums have complete information. Write a function which takes an album's id (like 2548), a property prop (like "artist" or "tracks"), and a value (like "Addicted to Love") to modify the d…
// Setup
var collection = {
"2548": {
"album": "Slippery When Wet",
"artist": "Bon Jovi",
"tracks": [
"Let It Rock",
"You Give Love a Bad Name"
]
@nickihastings
nickihastings / validate-us-tel-numbers.js
Created April 4, 2018 18:48
Return true if the passed string is a valid US phone number. The user may fill out the form field any way they choose as long as it is a valid US number. In the comments are examples of valid formats for US numbers (refer to the tests below for other variants):
function telephoneCheck(str) {
// Good luck!
var regex = /(^1(?=(\s\d{3}\s?-?\d{3}\s?-?\d{4}$)|(\s?\(\d{3}\)\s?-?\d{3}\s?-?\d{4}$)))|(^\((?=\d{3}\)\s?-?\d{3}\s?-?\d{4}$))|(^\d{3}(?=\s?-?\d{3}\s?\-?\d{4}$))/;
return regex.test(str);
}
@nickihastings
nickihastings / arguments-optional.js
Created April 3, 2018 06:54
Create a function that sums two arguments together. If only one argument is provided, then return a function that expects one argument and returns the sum. For example, addTogether(2, 3) should return 5, and addTogether(2) should return a function. Calling this returned function with a single argument will then return the sum: var sumTwoAnd = ad…
function addTogether() {
//create a function that test whether arguments are numbers
//if not a number return undefined, if it is return the number
function checkArgs(val){
if(typeof val !== 'number'){
return undefined;
}
return val;
}
@nickihastings
nickihastings / everything-be-true.js
Created April 2, 2018 17:32
Check if the predicate (second argument) is truthy on all elements of a collection (first argument). Remember, you can access object properties through either dot notation or [] notation.
function truthCheck(collection, pre) {
// Is everyone being true?
//set a variable to count the truthies
var truthy = 0;
//loop over the array and test for true
//if it's true add one to truth
for(var i = 0; i<collection.length; i++){
if(collection[i][pre]){
truthy ++;
}
@nickihastings
nickihastings / binary-agents.js
Created April 2, 2018 16:47
Return an English translated sentence of the passed binary string. The binary string will be space separated.
function binaryAgent(str) {
var arr = str.split(' ');
//var words = [];
for(var i =0; i<arr.length; i++){
arr[i] = parseInt(arr[i], 2);
arr[i] = String.fromCharCode(arr[i]);
//can also write the above as:
//words.push(String.fromCharCode(parseInt(arr[i], 2)));
//parses first then converts to letter then pushes to array.
}
@nickihastings
nickihastings / steamroller.js
Created March 31, 2018 17:59
Flatten a nested array. You must account for varying levels of nesting.
function steamrollArray(arr) {
// I'm a steamroller, baby
var result = []; //store the resulting flat array
//function to recursively flatten arrays inside of arrays.
function flatten(arr){
//for every item in the array check if it is an array itself
for(var i = 0; i < arr.length; i++){
if(Array.isArray(arr[i]) ){
//if it is an array call the flatten function and concatinate the results
@nickihastings
nickihastings / drop-it.js
Last active March 30, 2018 13:35
Drop the elements of an array (first argument), starting from the front, until the predicate (second argument) returns true. The second argument, func, is a function you'll use to test the first elements of the array to decide if you should drop it or not. Return the rest of the array, otherwise return an empty array.
function dropElements(arr, func) {
// Drop them elements.
//shift() removes the element if it returns false
//so loop over the array, test against the function
//if it returns false remove the element, otherwise
//return the array.
while(arr.length > 0){
var check = func(arr[0]);
if(!check){
@nickihastings
nickihastings / finders-keepers.js
Created March 30, 2018 10:58
Create a function that looks through an array (first argument) and returns the first element in the array that passes a truth test (second argument).
function findElement(arr, func) {
var num = 0;
//filter the array using the provided function, this will keep anything that returns true in an array;
num = arr.filter(func);
//return the first element in the new array.
return num[0];
}
findElement([1, 2, 3, 4], function(num){ return num % 2 === 0; });
@nickihastings
nickihastings / smallest-common-multiple.js
Last active March 30, 2018 10:40
Find the smallest common multiple of the provided parameters that can be evenly divided by both, as well as by all sequential numbers in the range between these parameters. The range will be an array of two numbers that will not necessarily be in numerical order. e.g. for 1 and 3 - find the smallest common multiple of both 1 and 3 that is evenly…
function smallestCommons(arr) {
//sort the array ascending, so that a is always the smaller number
arr.sort(function(a,b){
return a-b;
});
//first find the GCD of the pair of numbers using the Euclidean Algorithm.
//return the GCD
function gcd(a, b){
var x = a;
@nickihastings
nickihastings / sum-all-primes.js
Created March 26, 2018 20:33
Sum all the prime numbers up to and including the provided number. A prime number is defined as a number greater than one and having only two divisors, one and itself. For example, 2 is a prime number because it's only divisible by one and two. The provided number may not be a prime.
function sumPrimes(num) {
var ints = [2]; //array to hold prime numbers
//function to test if a number is a prime
function isPrime(test){
for(var i = 2; i < test; i++){
if(test % i == 0){ //if there's no remainder it's not a prime
return false; //not a prime number