Implement the filter Method on a Prototype explain

Implement the filter Method on a Prototype explain
0

#1

is it right or he want another code.

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

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

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/67.0.3396.99 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


#2

Did you pass the all the tests? If so, congratulations you did it right.


#3

yes but i want to know if the code right or not i am confused can you explain the code :blush: pls


#4

It is right, because you pass all the tests. You wrote the code, so see if you can explain it to me. What was your algorithm?


#5

i made a for loop to check every element but i don’t understand why we write return item % 2 === 1; and i written it in the function above


#6

Let me retract something I said before. You passed the challenge, but you missed the whole point of the challenge, because you hardcoded the same function that was passed into the function. Do you understand how the normal filter method works? I ask, because I should be able to call your myFilter method on an array and pass ANY function I want and it provide the correct results.

The code seen below is in the challenge.

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

It is there to test that your myFilter method will take the function supplied (the following anonymous function) and return the correct array.

// anonymous function being passed to the myFilter method
function(item){
  return item % 2 === 1;
}

If I called your myFilter method with the following array and function, it would fail, because your method only checks if the array items are odd numbers (that is what the item %2 === 1 is checking).

For example, if tried to use your myFilter method with the code below, new_s would still be [23, 65, 5] instead of the correct array [65, 98]. Why? Because your method only is only filtering odd numbers. The function I passed should filter only number greater than 60.

var s = [23, 65, 98, 5];
var new_s = s.myFilter(function(item) {
  return item > 60;
});

#7

is it right .


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

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

};

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


#8

That is better. See if you can do it so that you do not reference the global variable s. I should be able to call your myFilter method like below. Now there is no global variable for you to reference inside the function. You must use the this object.

var result = [23, 65, 98, 5].myFilter(function(item) {
  return item > 60;
});
console.log(result);  // should display [65, 98]

#9

is it it better now

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

Array.prototype.myFilter = function(callback){
  var newArray = [];

  // Add your code below this line
  let arr = s.slice();
for (let i=0 ; i<s.length;i++){
 let item = arr[i];
if (callback(item)){
   newArray.push(item);
}
}  // Add your code above this line
  return newArray;

};

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

#10

You are still referencing s inside the function. What if there is no global s variable? See my last reply.


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

Array.prototype.myFilter = function(callback){
  var newArray = [];

  // Add your code below this line
for (let i=0 ; i<this.length;i++){
 let item = this[i];
if (callback(item)){
   newArray.push(item);
}
}  // Add your code above this line
  return newArray;

};

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

#12

If that passes the tests, you have learned something today.