Skip to content

Instantly share code, notes, and snippets.

@Maxscores
Last active March 8, 2018 16:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Maxscores/461fcf2fe9d7eef3297508e83c3a5813 to your computer and use it in GitHub Desktop.
Save Maxscores/461fcf2fe9d7eef3297508e83c3a5813 to your computer and use it in GitHub Desktop.

JS Drum Kit

function playSound(e) {
    const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`)
    const key = document.querySelector(`.key[data-key="${e.keyCode}"]`)
    if (!audio) return
    audio.currentTime = 0
    audio.play()
    key.classList.add('playing')
  }
  window.addEventListener('keydown', playSound)
  function removeTransition(e) {
    if(e.propertyName !== 'transform') return;
    this.classList.remove('playing')
  }
  const keys = document.querySelectorAll('.key')
  keys.forEach(key => key.addEventListener('transitionend', removeTransition))

JS Clock

const secondHand = document.querySelector('.second-hand')
  const minuteHand = document.querySelector('.min-hand')
  const hourHand = document.querySelector('.hour-hand')

  function updateSeconds(now) {
    const seconds = now.getSeconds()
    const secondsDegrees = ((seconds / 60) * 360) + 90
    secondHand.style.transform = `rotate(${secondsDegrees}deg)`
  }

  function updateMinutes(now) {
    const minutes = now.getMinutes()
    const minutesDegrees = ((minutes / 60) * 360) + 90
    minuteHand.style.transform = `rotate(${minutesDegrees}deg)`
  }

  function updateHours(now) {
    const hours = now.getHours()
    const hoursDegrees = ((hours / 12) * 360) + 90
    hourHand.style.transform = `rotate(${hoursDegrees}deg)`
  }

  function setDate() {
    const now = new Date()
    updateSeconds(now)
    updateMinutes(now)
    updateHours(now)
  }

  setInterval(setDate, 1000);

Array Cardio 1

  <script>
    // Get your shorts on - this is an array workout!
    // ## Array Cardio Day 1

    // Some data we can work with

    const inventors = [
      { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
      { first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
      { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
      { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
      { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
      { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
      { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
      { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
      { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
      { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
      { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
      { first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
    ];

    const people = ['Beck, Glenn', 'Becker, Carl', 'Beckett, Samuel', 'Beddoes, Mick', 'Beecher, Henry', 'Beethoven, Ludwig', 'Begin, Menachem', 'Belloc, Hilaire', 'Bellow, Saul', 'Benchley, Robert', 'Benenson, Peter', 'Ben-Gurion, David', 'Benjamin, Walter', 'Benn, Tony', 'Bennington, Chester', 'Benson, Leana', 'Bent, Silas', 'Bentsen, Lloyd', 'Berger, Ric', 'Bergman, Ingmar', 'Berio, Luciano', 'Berle, Milton', 'Berlin, Irving', 'Berne, Eric', 'Bernhard, Sandra', 'Berra, Yogi', 'Berry, Halle', 'Berry, Wendell', 'Bethea, Erin', 'Bevan, Aneurin', 'Bevel, Ken', 'Biden, Joseph', 'Bierce, Ambrose', 'Biko, Steve', 'Billings, Josh', 'Biondo, Frank', 'Birrell, Augustine', 'Black, Elk', 'Blair, Robert', 'Blair, Tony', 'Blake, William'];

    // Array.prototype.filter()
    // 1. Filter the list of inventors for those who were born in the 1500's
    const fifteen = inventors.filter(function(inventor) {
      if (inventor.year >= 1500 && inventor.year < 1600) {
        return true
      }
    });

    console.table(fifteen)
    // Array.prototype.map()
    // 2. Give us an array of the inventors' first and last names
    // const inventorNames = inventors.map(function(inventor) {
    //   return `${inventor.first} ${inventor.last}`
    // })

    const inventorNames = inventors.map(inventor =>`${inventor.first} ${inventor.last}`)

    console.table(inventorNames)

    // Array.prototype.sort()
    // // 3. Sort the inventors by birthdate, oldest to youngest
    // const sortedInventors = inventors.sort(function(first, second) {
    //   if(first.year > second.year) {
    //     return 1
    //   } else {
    //     return -1
    //   }
    // })

    const sortedInventors = inventors.sort((first, second) => first.year > second.year ? 1 : -1)

    console.table(sortedInventors)
    // Array.prototype.reduce()
    // 4. How many years did all the inventors live?
    // const totalYears = inventors.reduce(function(total, inventor) {
    //   return total + (inventor.passed - inventor.year)
    // }, 0)

    const totalYears = inventors.reduce((total, inventor) => {
      return total + (inventor.passed - inventor.year)
    }, 0)

    console.log(totalYears)
    // 5. Sort the inventors by years lived
    const sortedByAge = inventors.sort((first, second) => {
      var firstAge = (first.passed - first.year)
      var secondAge = (second.passed - second.year)
      if (firstAge > secondAge) {
        return 1
      } else {
        return -1
      }
    })

    console.table(sortedByAge)
    // 6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
    // https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris
    //
    // const category = document.querySelector('.mw-category')
    // const links = Array.from(category.querySelectorAll('a'))
    //
    // const de = links
    //             .map(link => link.textContent)
    //             .filter(streetName => streetName.includes('de'))

    // 7. sort Exercise
    // Sort the people alphabetically by last name
    const alphaPeople = people.sort(function(a, b) {
      const [aLast, aFirst] = a.split(' ')
      const [bLast, bFirst] = b.split(' ')
      if (aLast > bLast) {
        1
      } else {
        -1
      }
    })

    console.table(alphaPeople)
    // 8. Reduce Exercise
    // Sum up the instances of each of these
    const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck' ];

    const sumVehicles = data.reduce((result, vehicle) => {
      if (!result[vehicle]) {
        result[vehicle] = 0
      }
      result[vehicle]++
      return result
    }, {})

    console.table(sumVehicles)
  </script>

Array Cardio 2

  <script>
    // ## Array Cardio Day 2

    const people = [
      { name: 'Wes', year: 1988 },
      { name: 'Kait', year: 1986 },
      { name: 'Irv', year: 1970 },
      { name: 'Lux', year: 2015 }
    ];

    const comments = [
      { text: 'Love this!', id: 523423 },
      { text: 'Super good', id: 823423 },
      { text: 'You are the best', id: 2039842 },
      { text: 'Ramen is my fav food ever', id: 123523 },
      { text: 'Nice Nice Nice!', id: 542328 }
    ];

    // Some and Every Checks
    // Array.prototype.some() // is at least one person 19 or older?
    const isAdult = people.some(person => {
      const currentYear = (new Date()).getFullYear()
      return currentYear - person.year >= 19
    })

    console.log(isAdult)
    // Array.prototype.every() // is everyone 19 or older?
    const allAdult = people.every(person => {
      const currentYear = (new Date()).getFullYear()
      return currentYear - person.year >= 19
    })

    console.log(allAdult)
    // Array.prototype.find()
    // Find is like filter, but instead returns just the one you are looking for
    // find the comment with the ID of 823423

    // const comment = comments.find(comment => comment.id === 823423)
    function findCommentById(id) {
      return comments.find(comment => comment.id === id)
    }

    const comment = findCommentById(823423)

    console.log(comment)
    // Array.prototype.findIndex()
    // Find the comment with this ID
    // delete the comment with the ID of 823423

    // const commentIndex = comments.findIndex(comment => comment.id === 823423)
    function findCommentIndexById(id) {
      return comments.findIndex(comment => comment.id === id)
    }

    const commentIndex = findCommentIndexById(823423)

    comments.splice(commentIndex, 1)

    console.log(comments)
  </script>

References vs Copying

<script>
    // start with strings, numbers and booleans
    // let age = 100;
    // let age2 = age;
    // console.log(age, age2)
    // age = 299
    // console.log(age, age2)
    //
    // let name = 'Wes'
    // let name2 = name
    // console.log(name, name2)
    // name = 'Max'
    // console.log(name, name2)


    // Let's say we have an array
    const players = ['Wes', 'Sarah', 'Ryan', 'Poppy'];

    // and we want to make a copy of it.
    const team = players

    console.log(players, team)
    // You might think we can just do something like this:
    // team[4] = 'Lux'

    // console.log(players, team)
    // however what happens when we update that array?

    // now here is the problem!

    // oh no - we have edited the original array too!

    // Why? It's because that is an array reference, not an array copy. They both point to the same array!

    // So, how do we fix this? We take a copy instead!
    // one way
    const team2 = players.slice()
    // or create a new array and concat the old one in
    const team3 = [].concat(players)
    // or use the new ES6 Spread
    const team4 = [...players]

    // now when we update it, the original one isn't changed
    const team5 = Array.from(players)
    // The same thing goes for objects, let's say we have a person object

    // with Objects
    const person = {
      name: 'Wes Bos',
      age: 80
    };

    // and think we make a copy:
    const captain = person


    // how do we take a copy instead?
    const cap2 = Object.assign({}, person, {number: 99})
    console.log(cap2)
    console.log(captain)
    console.log(person)
    // We will hopefully soon see the object ...spread

    // Things to note - this is only 1 level deep - both for Arrays and Objects. lodash has a cloneDeep method, but you should think twice before using it.
    
    // JSON.parse(JSON.stringify(object))
  </script>

Tally String Times

<script>
  const list = Array.from(document.querySelectorAll('li'))

  const totalSeconds = list.reduce((total, video) => {
    const [mins, secs] = video.dataset.time.split(":").map(parseFloat)
    let videoSeconds = (mins * 60) + secs
    return total += videoSeconds
  }, 0)

  function secondsToMinutes(seconds) {
    let hour = Math.floor(seconds / 3600)
    let min = Math.floor(seconds % 3600 / 60)
    let sec = seconds % 3600 % 60
    return `${hour}:${min}:${sec}`
  }

  const totalTime = secondsToMinutes(totalSeconds)

  console.log(totalTime)
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment