Javascript Problems – Create my own Array.prototype.filter() method – myFilter()

The purpose of this exercise is to create my own Array.prototype.filter() method – myFilter().  On line 2, I add a new myFilter() method, which takes in a function as an argument, to the array object.  I loop through each item in the array that called the method, and on line 6 determine if the function has returned anything for that item.  If so, I push it to my new output array on line 7.

On line 52, I use the myFilter() method on the “list” array of a few numbers.  I call the isTen function, which returns numbers greater than 10.  On line 53, I use the myFilter() method on the “arr” array (an array of objects) to call the filterID function which will only return ids that are a valid number.  Finally, on line 54, I use the myFilter() method to call the filterFruit function on the fruits array.  It returns any fruits with the letter “ap” in the word: apPLE and GRapE.

// create my own filter method
Array.prototype.myFilter = function(func) {
    const output=[];
    for(let i=0; i<this.length; i++) {
        // console.log('this[i]', this[i]);
        if(func(this[i])) {
            output.push(this[i]);
        }
    }
    return output;
};

function isTen(item) {
   if(item >= 10) {
       return item
   } 
};

function isNumber(obj) {
    return obj !== undefined && typeof(obj) === 'number' && !isNaN(obj);
};

function filterID(item) {
    if (isNumber(item.id)) {
        return item;
    };
};

function filterFruit(item) {
    let search = 'ap';
    if(item.includes(search) === true) {
        return item;
    }
};

const list = [12, 5, 8, 130, 44];

const arr = [
  { id: 15 },
  { id: -1 },
  { id: 0 },
  { id: 3 },
  { id: 12.2 },
  { },
  { id: null },
  { id: NaN },
  { id: 'undefined' }
];

const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];

console.log(list.myFilter(isTen));  //  [ 12, 130, 44 ] 
console.log(arr.myFilter(filterID)); 
// [ { id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 } ]
console.log(fruits.myFilter(filterFruit)); // [ 'apple', 'grapes' ]

I took my sample problem data from the MDN Developer Array.prototype.filter() page.

Leave a Reply