| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | var forOwn = require('./forOwn');var isArray = require('../lang/isArray');    function containsMatch(array, pattern) {        var i = -1, length = array.length;        while (++i < length) {            if (deepMatches(array[i], pattern)) {                return true;            }        }        return false;    }    function matchArray(target, pattern) {        var i = -1, patternLength = pattern.length;        while (++i < patternLength) {            if (!containsMatch(target, pattern[i])) {                return false;            }        }        return true;    }    function matchObject(target, pattern) {        var result = true;        forOwn(pattern, function(val, key) {            if (!deepMatches(target[key], val)) {                // Return false to break out of forOwn early                return (result = false);            }        });        return result;    }    /**     * Recursively check if the objects match.     */    function deepMatches(target, pattern){        if (target && typeof target === 'object') {            if (isArray(target) && isArray(pattern)) {                return matchArray(target, pattern);            } else {                return matchObject(target, pattern);            }        } else {            return target === pattern;        }    }    module.exports = deepMatches;
 |