UNPKG

1.57 kBJavaScriptView Raw
1var isNumber = require('./isNumber')
2var isArray = require('./isArray')
3var isString = require('./isString')
4var isRegExp = require('./isRegExp')
5var isDate = require('./isDate')
6var isBoolean = require('./isBoolean')
7var isUndefined = require('./isUndefined')
8var keys = require('./keys')
9
10var every = require('./every')
11
12function helperEqualCompare (val1, val2, compare, func, key, obj1, obj2) {
13 if (val1 === val2) {
14 return true
15 }
16 if (val1 && val2 && !isNumber(val1) && !isNumber(val2) && !isString(val1) && !isString(val2)) {
17 if (isRegExp(val1)) {
18 return compare('' + val1, '' + val2, key, obj1, obj2)
19 } if (isDate(val1) || isBoolean(val1)) {
20 return compare(+val1, +val2, key, obj1, obj2)
21 } else {
22 var result, val1Keys, val2Keys
23 var isObj1Arr = isArray(val1)
24 var isObj2Arr = isArray(val2)
25 if (isObj1Arr || isObj2Arr ? isObj1Arr && isObj2Arr : val1.constructor === val2.constructor) {
26 val1Keys = keys(val1)
27 val2Keys = keys(val2)
28 if (func) {
29 result = func(val1, val2, key)
30 }
31 if (val1Keys.length === val2Keys.length) {
32 return isUndefined(result) ? every(val1Keys, function (key, index) {
33 return key === val2Keys[index] && helperEqualCompare(val1[key], val2[val2Keys[index]], compare, func, isObj1Arr || isObj2Arr ? index : key, val1, val2)
34 }) : !!result
35 }
36 return false
37 }
38 }
39 }
40 return compare(val1, val2, key, obj1, obj2)
41}
42
43module.exports = helperEqualCompare