Implement the filter Method on a Prototype - Help

Tell us what’s happening:
Hey, I tried with this.forEach but it doesn’t seem to do the job, that is to say, loop over every element in any array. Or is something else wrong with my code? Thanks

Your code so far


// the global Array
var s = [23, 65, 98, 5];
//How do I reference any array that could be put into the function? 
Array.prototype.myFilter = function(callback){
  var newArray = [];
  // Add your code below this line
  newArray.push(this.forEach(callback));
  // Add your code above this line
  return newArray;

};

var new_s = s.myFilter(function(item){
  return item % 2 === 1;
});

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/functional-programming/implement-the-filter-method-on-a-prototype

For each does not return anything and a few other issues I see… but replace that part first

1 Like
newArray.push(this.forEach((item)=>callback.item));

This is what I could think of so that forEach returns something.
Doesn’t pass the challenge and I’m not sure what’s wrong… Please help

this.forEach(function(item){
// add item to new array if callback test passes

})

or

for(let i=0; i<arrlen; i++){
// add current index of old array to new array if callback test passes

}

// hint : you must call “callback” as a function

1 Like

How do I write if callback is true then push element ofthis (any) array?
This was my try. Didn’t work…

for (let i=0; i<this.length;i++){
    if(callback)
    newArray.push(this.i);
  }
callback(this.i) //didn't work either
for (let i=0; i<this.length;i++){
    if(this.i.callback)
    newArray.push(this.i);
  } //neither did this 

:frowning:

Good job! You basically had it.

IMPORTANT : !!! PLZZZ READ :slight_smile:

REASON : https://stackoverflow.com/questions/17189642/difference-between-using-bracket-and-dot-notation

Array.prototype.myFilter = function(callback){
var newArray = [];
// Add your code below this line
for(let i=0; i<this.length; i++){
const currentItem = this[i]
if(callback(currentItem)){
newArray.push(currentItem)
}
}
// Add your code above this line
return newArray;

};

1 Like

Thank you!!! Makes sense to me now, will read the article.