freeCodeCamp Challenge Guide: Finders Keepers

Finders Keepers


Problem Explanation

We need to return the element from an array that passes a function. Both the function and the array are passed into our function findElement(arr, func).


Hints

Hint 1

We need to return the element from an array that passes a function. Both the function and the array are passed into our function findElement(arr, func). Looking through the array can be done with a for loop.

Hint 2

num is passed to the function. We will need to set it to the elements we want to check with the function.

Hint 3

Do not forget, if none of the numbers in the array pass the test, it should return undefined.


Solutions

Solution 1 (Click to Show/Hide)
function findElement(arr, func) {
  let num = 0;

  for (let i = 0; i < arr.length; i++) {
    num = arr[i];
    if (func(num)) {
      return num;
    }
  }

  return undefined;
}

Code Explanation

  • Challenge asks us to look through array. This is done using a for loop.
  • The num variable is being passed into the function, so we set it to each index in our array.
  • The pre-defined function already checks each number for us, so if it is “true”, we return that num.
  • If none of the numbers in the array pass the function’s test, we return undefined.
Solution 2 (Click to Show/Hide)
function findElement(arr, func) {
  return arr.find(func);
}

Relevant Links

Solution 3 (Click to Show/Hide)

** Recursive Solution**

function findElement(arr, func) {
  if (arr.length > 0 && !func(arr[0])) {
    return findElement(arr.slice(1), func);
  } else {
    return arr[0];
  }
}
104 Likes
function findElement(arr, func) {
  return arr.find(func);
}

findElement([1, 2, 3, 4], function(num){ return num % 2 === 0; });

You can just use a find array helper method instead of the filter; makes your code even smaller

55 Likes

This could be simple one liner solution which is more modular and obviously less code. Here is how:


function findElement( arr , func ) {
     return arr.filter(func)[0];
}

And that’s about it. :slight_smile:

34 Likes

Or alternatively:

function findElement(arr, func) {
  return arr.filter(func).shift();
}
7 Likes

function findElement(arr, func) {

for (var i=0;i<arr.length;i++){ // loop through the provided array.
if (func(arr[i])) { // if the provided function is called & passed the parameter of the loops current element & returns true,
return arr[i]; // return the current loop element to the console.
}
}
return undefined; // if no element of the provided array passes the functions test return undefined.
}

findElement([1, 2, 3, 4], function(num){ return num % 2 === 0; });

3 Likes
function findElement(arr, func) {
  return arr.find(func);
}
7 Likes

Hi all,

Here is my code:

function find`Eleme`nt(arr, func) {
          //decalre an array to store all value that pass the test
          var arr2 = [];
      
      // add all values that pass the test on func
      arr2 = ( arr.filter(function(el){
        return func(el) ? arr2.push(el) : "";
      }) );
      
      //return first element that passed the test, if it didn't pass the test 
      //it will return undefined - exactly what we need!
      return arr2[0];
    } 
    //test
    findElement([1, 3, 5, 9], function(num){ return num % 2 === 0; });
3 Likes

My solution as well!

1 Like

One more way. A must try for the one, who want to keep it simple:

function findElement(arr, func) {
  for(var i = 0; i < arr.length; i++) {
    if(func(arr[i])) {
      return arr[i];
    }
  }
  return undefined;
}

15 Likes

Looking at other solutions, I could have just chained the shift method to the filter.

function findElement(arr, func) {
  
  let test   = arr.filter(func),
      output = test.shift();
  
  return output
}

findElement([1, 3, 5, 8, 9, 10], function(num){ return num % 2 === 0; });
2 Likes

Did it in the intermediate way in just one line!!!

function find(arr, func) {
  return arr.filter(func)[0];
}
6 Likes

This is my solution, for this problem, it was easy to find the solution for this anyways is a challenge:

function findElement(arr, func) {
  var num = 0;
  for(j = 0; j < arr.length; j++){
    if(func(arr[j]) === true){
      return arr[j];
    }
  }
}
3 Likes

function findElement(arr, func) {

var num = arr.filter(function(a){
return func(a);
});
return num[0];
}

findElement([1, 2, 3, 4], function(num){ return num % 2 === 0; });

function findElement(arr, func) {
  return arr.filter(function(item){
    return func(item);
  })[0];
}
1 Like

Hello,

Just keeping it simple:

    function findElement(arr, func) {
      
      for (var i = 0; i < arr.length; i++)
        if(func(arr[i])) return arr[i];
    }
    //You make this look easy!
    findElement([1, 3, 5, 8, 9, 10], function(num){ return num % 2 === 0; });
2 Likes