Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const
- /**
- * Getting raw object prototype
- * @param target {Object}
- * @return {String}
- */
- getPrototypeName = target => Object.prototype.toString.call(target),
- /**
- * Determines whether target exists or not
- * @param target {Object}
- * @return {boolean}
- */
- isset = target => !/(Undefined|Null)/.test(getPrototypeName(target)),
- /**
- * Check if target is Regular Expression
- * @param target {Object}
- * @return {boolean}
- */
- isFunction = target => /Function/.test(getPrototypeName(target)),
- /**
- * Check if target is function
- * @param target {Object}
- * @return {boolean}
- */
- isRegExp = target => /RegExp/.test(getPrototypeName(target)),
- /**
- * Check if target is string
- * @param target {Object}
- * @return {boolean}
- */
- isString = target => /String/.test(getPrototypeName(target)),
- /**
- * Check if target is number
- * @param target {Object}
- * @return {boolean}
- */
- isNumber = target => /Number/.test(getPrototypeName(target)),
- /**
- * Check if target is object
- * @param target {Object}
- * @return {boolean}
- */
- isObject = target => /Object/.test(getPrototypeName(target)),
- /**
- * Check if object is array
- * @param target {Object}
- * @return {boolean}
- */
- isArray = target => /Array/.test(getPrototypeName(target)),
- /**
- * Check if target is empty
- * @param target {Object}
- * @return {boolean}
- */
- empty = target => {
- // Objects
- if (isObject(target)) return Object.keys(target).length === 0;
- // Strings
- if (isString(target)) return target.valueOf() === "";
- // Arrays
- if (isArray(target)) return target.length === 0;
- // Other
- return false;
- },
- /**
- * Compare two objects
- * @param obj1 {Object}
- * @param obj2 {Object}
- * @return {boolean}
- */
- equals = (obj1, obj2) => {
- // Checking if variables can be compared
- if (!isset(obj1) || !isset(obj2)) return false;
- // Checking if objects are of the same type
- if (getPrototypeName(obj1) !== getPrototypeName(obj2)) return false;
- // Checking content equality
- switch (true) {
- // Comparing strings (class String covered)
- case isString(obj1): {
- return obj1.valueOf() === obj2.valueOf();
- }
- // Comparing arrays (strict order)
- case isArray(obj1): {
- // Checking size of arrays
- if (obj1.length !== obj2.length) return false;
- // Checking all items
- for (let i = 0; i < obj2.length; i++)
- if (!equals(obj1[i], obj2[i])) return false;
- return true;
- }
- // Comparing objects
- case isObject(obj1): {
- // Checking size of arrays
- if (Object.keys(obj1).length !== Object.keys(obj2).length) return false;
- // Checking all items
- for (let key in obj1) { // Not checking null values of the keys
- if (!obj2.hasOwnProperty(key) || !equals(obj1[key], obj2[key])) return false;
- }
- return true;
- }
- default: {
- return obj1 === obj2;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement