@webqit/util
Version:
Utility functions used accross multiple JS libraries.
34 lines (30 loc) • 877 B
JavaScript
/**
* @imports
*/
import _isArray from '../js/isArray.js';
import _isObject from '../js/isObject.js';
import _isFunction from '../js/isFunction.js';
import _compareCallback from './compareCallback.js';
/**
* Gets the difference(s) between (members of) two objects;
* optionally with custom assertion.
*
* @param mixed ob1
* @param mixed obj2
* @param string|function assertion
* @param bool netDiff
*
* @return object|undefined
*/
const _diff = function(obj1, obj2, assertion = true, netDiff = true) {
return _compareCallback(obj1, obj2, (v1, v2) => {
if ((_isArray(v1) && _isArray(v2)) || (_isObject(v1) && _isObject(v2))) {
return _diff(v1, v2, assertion, netDiff);
}
return _isFunction(assertion) ? assertion(v1, v2) : (v1 === v2) === assertion;
}, netDiff/*netComparison*/, true/*contrast*/);
};
/**
* @exports
*/
export default _diff;