--- title: Everything Be True --- # Everything Be True --- ## Problem Explanation The program needs to check if the second argument is a truthy element, and it must check this for each object in the first argument. #### Relevant Links * JavaScript Truthy * JavaScript Arguments --- ## Hints ### Hint 1 Remember to iterate through the first argument to check each object. ### Hint 2 Only if all of them are truthy will we return true, so make sure all of them check. ### Hint 3 You could use loops or callback functions, there are multiple ways to solve this problem. --- ## Solutions
Solution 1 (Click to Show/Hide) **Using for-in loop & hasOwnProperty** ```javascript function truthCheck(collection, pre) { // Create a counter to check how many are true. var counter = 0; // Check for each object for (var c in collection) { // If it is has property and value is truthy if (collection[c].hasOwnProperty(pre) && Boolean(collection[c][pre])) { counter++; } } // Outside the loop, check to see if we got true for all of them and return true or false return counter == collection.length; } // test here truthCheck( [ { user: "Tinky-Winky", sex: "male" }, { user: "Dipsy", sex: "male" }, { user: "Laa-Laa", sex: "female" }, { user: "Po", sex: "female" } ], "sex" ); ``` #### Code Explanation * First I create a counter to check how many cases are actually true. * Then check for each object if the value is truthy * Outside the loop, I check to see if the counter variable has the same value as the length of **collection**, if true then return **true**, otherwise, return **false** #### Relevant Links * JS Loops * Object.prototype.hasOwnProperty()
Solution 2 (Click to Show/Hide) **Using Array.every()** ```javascript function truthCheck(collection, pre) { return collection.every(function(element) { return element.hasOwnProperty(pre) && Boolean(element[pre]); }); } // test here truthCheck( [ { user: "Tinky-Winky", sex: "male" }, { user: "Dipsy", sex: "male" }, { user: "Laa-Laa", sex: "female" }, { user: "Po", sex: "female" } ], "sex" ); ``` #### Code Explanation * Uses the native "every" method to test whether all elements in the array pass the test. * This link will help Array.prototype.every() #### Relevant Links * JS Array.prototype.every() * MDN Array.prototype.every()
Solution 3 (Click to Show/Hide) ```javascript function truthCheck(collection, pre) { // Is everyone being true? return collection.every(obj => obj[pre]); } truthCheck( [ { user: "Tinky-Winky", sex: "male" }, { user: "Dipsy", sex: "male" }, { user: "Laa-Laa", sex: "female" }, { user: "Po", sex: "female" } ], "sex" ); ``` #### Code Explanation * For _every_ object in the `collection` array, check the truthiness of object's property passed in `pre` parameter * `Array#every` method internally checks if the value returned from the callback is truthy. * Return `true` if it passes for _every_ object. Otherwise, return `false`. #### Relevant Links * `Array#every`