Help testing for certain key-value pairs in array objects

I am working on Wherefore Art Thou in the Javascript Intermediate Algorithm Scripting section. I have been stuck on this one for several days. I’ve looked up other answers, watched videos, etc. but I can’t seem to figure out why my code isn’t working. I can only pass the first couple tests. Now it seems to stop running after the first true result and doesn’t increment properly through the rest of the collection array. Help!

function whatIsInAName(collection, source) {
  // Only change code below this line
  var sourceKeys = Object.keys(source);
  var resultArr = collection.filter(function(obj){
    //i is not incrementing. Why?
    for(let i = 0; i < collection.length; i++){
      console.log("sourceKeys[i]: " + sourceKeys[i]);
      console.log("obj[sourceKeys[i]]: "+ obj[sourceKeys[i]]);
      console.log("source[sourceKeys[i]]: " + source[sourceKeys[i]]);
    if(!obj.hasOwnProperty(sourceKeys[i]) || obj[sourceKeys[i]] !== source[sourceKeys[i]]){
      } else{
      return obj;
return resultArr;
  // Only change code above this line

whatIsInAName([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet" });

Much appreciated.

Notice two things.
Function passed to filter should return true or false based on fact whether it should be kept in the resulting array.
Filter will receive one-by-one each element within the collection as obj, but at the same time within the filtering function i is iterated based on collection.length. Does this relation between i and collection size makes here sense?

Thank you. Maybe I tried so many things that I lost track of what I was doing. I will change that and see where it goes and come back later. Cheers!

Ok so based on Solution 1 to the exercise, I had to change a few small things with my syntax and the i in the function should iterate based on sourceKeys.length instead. Yay!