UNPKG

1.44 kBJavaScriptView Raw
1var forOwn = require('./forOwn');
2var isArray = require('../lang/isArray');
3
4 function containsMatch(array, pattern) {
5 var i = -1, length = array.length;
6 while (++i < length) {
7 if (deepMatches(array[i], pattern)) {
8 return true;
9 }
10 }
11
12 return false;
13 }
14
15 function matchArray(target, pattern) {
16 var i = -1, patternLength = pattern.length;
17 while (++i < patternLength) {
18 if (!containsMatch(target, pattern[i])) {
19 return false;
20 }
21 }
22
23 return true;
24 }
25
26 function matchObject(target, pattern) {
27 var result = true;
28 forOwn(pattern, function(val, key) {
29 if (!deepMatches(target[key], val)) {
30 // Return false to break out of forOwn early
31 return (result = false);
32 }
33 });
34
35 return result;
36 }
37
38 /**
39 * Recursively check if the objects match.
40 */
41 function deepMatches(target, pattern){
42 if (target && typeof target === 'object' &&
43 pattern && typeof pattern === 'object') {
44 if (isArray(target) && isArray(pattern)) {
45 return matchArray(target, pattern);
46 } else {
47 return matchObject(target, pattern);
48 }
49 } else {
50 return target === pattern;
51 }
52 }
53
54 module.exports = deepMatches;
55
56