Here is an example from an exercise this week that illustrates the beauty and challenge of functional programming. The assignment was to alter the javascript .splice(arr) method so that it does not modify the array that is passed as an argument. What splice currently does:
arr.splice(indexToStartRemove, numToRemove, insert, insert, insert)Splice starts removing values out of an array at "indexToStartRemove" and removes "numToRemove" values upwards through the array. It then inserts any values listed in the 3rd, 4th...nth parameters listed in the method. Below is a concrete example. An array with values ordered through the array is modified so that the 0th index is removed and replaced by the number value 99.
var array = [1,2,3,4,5,6,7,8,9,10] array.splice(0,1,99) console.log(array) // returns [99,2,3,4,5,6,7,8,9,10]The following is an example of a splice function that behaves in the same way while remaining pure and not modifying the existing array:
var array = [1,2,3,4,5,6,7,8,9,10] var splice = function(indexToRemove, numToRemove, insert){ newArray = [] for(i=0; i<indexToRemove; i++){ newArray.push(array[i]); } for(i=3; i<arguments.length; i++){ newArray.push(arguments[i]); } for(i=indexToRemove+numToRemove; i<array.length; i++){ newArray.push(array[i]); } return newArray }
One line wonder. A few hacks involved. Array.prototype applies the .slice() method to the arguments "array-like object". For whatever reason JS decided that all functions should contain a native arguments property for all parameters, should look like array, but not have all the properties of an array, or for that matter be one. Mystifying.
var splice = function(){ [].concat(array.slice(0,indexToRemove)).Array.prototype.apply().slice().concat(arguments.slice(3,arguments.length)).concat(array.slice(indexToRemove+numToRemove, array.length)); }
Brian, I've been accepted into RefactorU. I'm prepared to sign on the dotted line and send money for the late March cohort. Before I commit to such a large decision & relocation, I wanted to reach out to you as a student in the inaugural class.... Has it been what you expected? Are you satisfied with your experiences with RefactorU? Would you recommend them to others in search of a programming bootcamp? Do you feel they've supported you fully in helping to find employment through their job network? I know you're busy... any and all feedback you can provide would be greatly appreciated! I can be reached here (obviously) or at my gmail account which includes my first, middle, and last names written in that order as one word (no underscores or dots). Thank you so much! Griffin Sue Peggy
ReplyDelete