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;
|