function where(collection, source) { var sourceKeys = Object.keys(source); return collection.filter(function(obj) { return sourceKeys.every(function(key) { return obj.hasOwnProperty(key) && obj[key] === source[key]; }); } where([{ first: "Romeo", last: "Montague" }, { first: "Mercutio", last: null }, { first: "Tybalt", last: "Capulet" }], { last: "Capulet"] }); console.log(sourceKeys); //outputs ["last"]