diff options
Diffstat (limited to 'js/where/where.js')
-rw-r--r-- | js/where/where.js | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/js/where/where.js b/js/where/where.js index 9ff6545..cef80f3 100644 --- a/js/where/where.js +++ b/js/where/where.js @@ -1,11 +1,11 @@ /** - * A functional implementation of a query filter similar to SQL's WHERE clause + * A mostly functional query filter similar to SQL's WHERE * @param {Array} collection - Array of objects to filter * @param {Object} properties - Object containing properties to match against * @returns {Array} - Filtered array of objects */ const where = (collection, properties) => { - // Handle null/undefined inputs + // null/undefined inputs if (!collection || !properties) { return []; } @@ -17,7 +17,7 @@ const where = (collection, properties) => { value })); - // Optimized nested value getter with memoization + // An optimized nested value getter with memoization const getNestedValue = (() => { const cache = new WeakMap(); @@ -45,20 +45,20 @@ const where = (collection, properties) => { }; })(); - // Optimized equality comparison + // An optimized equality comparison const isEqual = (value1, value2) => { - // Handle null/undefined cases first for early return + // Handle null/undefined cases first for faster returns if (value2 === undefined) return true; if (value1 === value2) return true; if (value1 === null || value2 === null) return false; - // Handle array comparison + // Array comparison if (Array.isArray(value1) && Array.isArray(value2)) { return value1.length === value2.length && value1.every((val, idx) => isEqual(val, value2[idx])); } - // Handle object comparison + // Object comparison if (typeof value2 === 'object') { return Object.entries(value2).every(([key, val]) => value1 && isEqual(value1[key], val) @@ -68,7 +68,7 @@ const where = (collection, properties) => { return false; }; - // Optimized property matcher + // Property matcher const matchesProperties = item => propertyPaths.every(({ parts, value }) => isEqual(getNestedValue(item, parts), value) @@ -114,7 +114,6 @@ const emailSubscribers = where(data, { }); */ -// Export for module usage if (typeof module !== 'undefined' && module.exports) { module.exports = where; } |