Functional Programming: Implement Map on a Prototype

Functional Programming: Implement Map on a Prototype
0

#1

Struggling through researching callback functions.The below solution isn’t working for me. Can someone tell me what is wrong with my code here? Thanks in advance!

// the global Array
var s = [23, 65, 98, 5];

Array.prototype.myMap = function(callback){
var newArray = [];
var copyS= s.slice();
// Add your code below this line
for(let i=0;i<copyS.length; i++){
newArray[i]=(callback(copyS[i]));
console.log(newArray);
}
// Add your code above this line
return newArray;

};

var new_s = s.myMap(function(item){
return item * 2;
});


#2

Your solution works when I test it.


#3

Yup, copied it, pasted it into https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/functional-programming/implement-map-on-a-prototype/, and it passes. What seems to be the problem you’re having?

One thing I might suggest, though – remember you won’t always have access to the global variable s. By coding your function to look for that, you have created a ‘brittle’ function. Instead, bear in mind that you’re writing to the prototype of the Array object, which means that when you run your function. you’d run it by s.myMap(...) – which means that, within your function, you have a this pseudo-variable.

Instead of forcing other coders who use your function to have a global s variable, you can simply change your line var copyS = s.slice(); to var arrayCopy = this.slice();. You can do this, because within your function, the context is the Array instance from which you’re calling the function. So it doesn’t need to know about s or any other global, it simply knows its running on an Array, and that this is the specific array it is referring to with this. If that makes any sense at all.


#4

That is super helpful feedback thank you!


#5

My error in the fcc console was “copyS is not a function”. But I erased my code and input the code above and it worked. Maybe I accidentally deleted a piece. Thanks!


#6

Glad I could help, but it sounds like you did all the heavy lifting…