≡ isEq.js -- deep compare objects and arrays in JavaScript
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10 lines
1.9 KiB

/**
* Written by Muthu Kumar <https://mkr.pw>
* Original source: https://github.com/CodeFeathers/isEq
*
* Deep compares objects or arrays and returns boolean.
* Supports Number, String, Boolean, Regexp, Objects, Arrays.
*
* Usage: isEq(<*>, <*>, [compareKeys, ...]);
*/
'use strict';var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj};var isEq=function isEq(item1,item2,compareKeys){if((typeof item1==='undefined'?'undefined':_typeof(item1))!==(typeof item2==='undefined'?'undefined':_typeof(item2))){return false}if(Array.isArray(item1)){if(!Array.isArray(item2)){return false}}if(Array.isArray(item2)){if(!Array.isArray(item1)){return false}}if(typeof item1==='number'||typeof item1==='string'||typeof item1==='boolean'||item1===null||item1===undefined){if(item1===item2){return true}else{return false}};if(item1===NaN&&item2===NaN){return true}if(item1 instanceof RegExp){return String(item1)===String(item2)}if((typeof item1==='undefined'?'undefined':_typeof(item1))!=='object'||(typeof item2==='undefined'?'undefined':_typeof(item2))!=='object'){throw new Error('[isEq] Unhandleable input!')}var item1Keys=Object.keys(item1);var item2Keys=Object.keys(item2);if(!compareKeys){compareKeys=item1Keys;if(item1Keys.length!==item2Keys.length){return false}};if(!Array.isArray(compareKeys)){throw new Error('[isEq] third parameter should be an array of keys!')}if(compareKeys.length===0){return true}for(var KeyIndex in compareKeys){var Key=compareKeys[KeyIndex];if(Array.isArray(item1[Key])&&Array.isArray(item2[Key])){var _Key=KeyIndex};if(item1[Key]!==item2[Key]){if(_typeof(item1[Key]==='object')&&_typeof(item2[Key]==='object')||Array.isArray(item1[Key])&&Array.isArray(item2[Key])){if(!isEq(item1[Key],item2[Key])){return false;break}}else{return false;break}}};return true};module.exports=isEq;