1 | var isNumber = require('./isNumber')
|
2 | var isArray = require('./isArray')
|
3 | var isString = require('./isString')
|
4 | var isRegExp = require('./isRegExp')
|
5 | var isDate = require('./isDate')
|
6 | var isBoolean = require('./isBoolean')
|
7 | var isUndefined = require('./isUndefined')
|
8 | var keys = require('./keys')
|
9 |
|
10 | var every = require('./every')
|
11 |
|
12 | function 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 |
|
43 | module.exports = helperEqualCompare
|