(object, other, equalFunc, customizer, isLoose, stackA, stackB)
| 2696 | } |
| 2697 | |
| 2698 | function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { |
| 2699 | var objProps = keys(object), |
| 2700 | objLength = objProps.length, |
| 2701 | othProps = keys(other), |
| 2702 | othLength = othProps.length; |
| 2703 | |
| 2704 | if (objLength != othLength && !isLoose) { |
| 2705 | return false; |
| 2706 | } |
| 2707 | var skipCtor = isLoose, |
| 2708 | index = -1; |
| 2709 | |
| 2710 | while (++index < objLength) { |
| 2711 | var key = objProps[index], |
| 2712 | result = isLoose ? key in other : hasOwnProperty.call(other, key); |
| 2713 | |
| 2714 | if (result) { |
| 2715 | var objValue = object[key], |
| 2716 | othValue = other[key]; |
| 2717 | |
| 2718 | result = undefined; |
| 2719 | if (customizer) { |
| 2720 | result = isLoose |
| 2721 | ? customizer(othValue, objValue, key) |
| 2722 | : customizer(objValue, othValue, key); |
| 2723 | } |
| 2724 | if (result === undefined) { |
| 2725 | result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB); |
| 2726 | } |
| 2727 | } |
| 2728 | if (!result) { |
| 2729 | return false; |
| 2730 | } |
| 2731 | skipCtor || (skipCtor = key == 'constructor'); |
| 2732 | } |
| 2733 | if (!skipCtor) { |
| 2734 | var objCtor = object.constructor, |
| 2735 | othCtor = other.constructor; |
| 2736 | |
| 2737 | if (objCtor != othCtor && |
| 2738 | ('constructor' in object && 'constructor' in other) && |
| 2739 | !(typeof objCtor == 'function' && objCtor instanceof objCtor && |
| 2740 | typeof othCtor == 'function' && othCtor instanceof othCtor)) { |
| 2741 | return false; |
| 2742 | } |
| 2743 | } |
| 2744 | return true; |
| 2745 | } |
| 2746 | |
| 2747 | function getCallback(func, thisArg, argCount) { |
| 2748 | var result = lodash.callback || callback; |
nothing calls this directly
no outgoing calls
no test coverage detected