1 define(['./forOwn', '../lang/isArray'], function(forOwn, isArray) {
3 function containsMatch(array, pattern) {
4 var i = -1, length = array.length;
6 if (deepMatches(array[i], pattern)) {
14 function matchArray(target, pattern) {
15 var i = -1, patternLength = pattern.length;
16 while (++i < patternLength) {
17 if (!containsMatch(target, pattern[i])) {
25 function matchObject(target, pattern) {
27 forOwn(pattern, function(val, key) {
28 if (!deepMatches(target[key], val)) {
29 // Return false to break out of forOwn early
30 return (result = false);
38 * Recursively check if the objects match.
40 function deepMatches(target, pattern){
41 if (target && typeof target === 'object') {
42 if (isArray(target) && isArray(pattern)) {
43 return matchArray(target, pattern);
45 return matchObject(target, pattern);
48 return target === pattern;