00001 var Stack = require('./_Stack'), 00002 baseIsEqual = require('./_baseIsEqual'); 00003 00005 var COMPARE_PARTIAL_FLAG = 1, 00006 COMPARE_UNORDERED_FLAG = 2; 00007 00018 function baseIsMatch(object, source, matchData, customizer) { 00019 var index = matchData.length, 00020 length = index, 00021 noCustomizer = !customizer; 00022 00023 if (object == null) { 00024 return !length; 00025 } 00026 object = Object(object); 00027 while (index--) { 00028 var data = matchData[index]; 00029 if ((noCustomizer && data[2]) 00030 ? data[1] !== object[data[0]] 00031 : !(data[0] in object) 00032 ) { 00033 return false; 00034 } 00035 } 00036 while (++index < length) { 00037 data = matchData[index]; 00038 var key = data[0], 00039 objValue = object[key], 00040 srcValue = data[1]; 00041 00042 if (noCustomizer && data[2]) { 00043 if (objValue === undefined && !(key in object)) { 00044 return false; 00045 } 00046 } else { 00047 var stack = new Stack; 00048 if (customizer) { 00049 var result = customizer(objValue, srcValue, key, object, source, stack); 00050 } 00051 if (!(result === undefined 00052 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) 00053 : result 00054 )) { 00055 return false; 00056 } 00057 } 00058 } 00059 return true; 00060 } 00061 00062 module.exports = baseIsMatch;