You need to change collection.hasOwnProperty(pre) to collection[i].hasOwnProperty(pre).
Your return true should be outside the for-loop’s blocks. Otherwise, your function returns true before iterating all the to the end of the array.
for (var i in collection) {
// (FIRST IF-STATEMENT) checks if collection[i] has property pre.
// If it doesn't, then return false
// (SECOND IF-STATEMENT) this will only run if the first condition is met.
// Checks if collection[i][pre] has truthy value. Returns false otherwise.
}
// If the loop has ended and no falsy values were found, therefore there are
// none. Return true.
By the way, you don’t need the array of false value. The if-statement already uses a boolean operation. So, for example, the block following this line if (condition[i](pre)) will only run if condition[i][pre] has a truthy value.
About the Boolean, this is what I am confused about. What if there is an answer in the collection that is true/false, would it read it wrong and Booleans include all true and false values. Am I correct?