made with requirebin
Last active
April 22, 2016 20:35
-
-
Save ivanalejandro0/610ad68f7cda8993d3803128b1cb0f5d to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Welcome! require() some modules from npm (like you were using browserify) | |
| // and then hit Run Code to run your code on the right side. | |
| // Modules get downloaded from browserify-cdn and bundled in your browser. | |
| var deepEqual = require('deep-equal'); | |
| function log(data) { | |
| data = data || ''; | |
| document.getElementById('result').innerHTML += data + '<br>'; | |
| } | |
| let asdf = { z: 'a', x: 'b' }; | |
| // let obj = { a: 1, b: 2, asdf: asdf }; | |
| let obj = { a: 1, b: 2 }; | |
| let state = { | |
| name: 'test', | |
| data: obj, | |
| }; | |
| let state2 = Object.assign({}, state); | |
| let state3 = Object.assign({}, state); | |
| let state4 = Object.assign({}, state); | |
| state3.data.b = 3; | |
| // state3.data.asdf.z = 'b'; | |
| state4.data = { a: 1, b: 3 }; | |
| log('state: ' + JSON.stringify(state)); | |
| log('state2:' + JSON.stringify(state2)); | |
| log('state3:' + JSON.stringify(state3)); | |
| log('state4:' + JSON.stringify(state4)); | |
| log(); | |
| const MAX = Math.pow(10, 5); | |
| var n = 1234; | |
| var t, startTime, endTime, equal; | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state2); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state2) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state3); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state3) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state4); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state4) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| log(); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = state === state || JSON.stringify(state) === JSON.stringify(state); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state) = ' + equal + "; time: " + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = JSON.stringify(state) === JSON.stringify(state2); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state2) = ' + equal + "; time: " + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = JSON.stringify(state) === JSON.stringify(state3); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state3) = ' + equal + "; time: " + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = JSON.stringify(state) === JSON.stringify(state4); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state4) = ' + equal + "; time: " + String(endTime - startTime)); | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| setTimeout(function(){ | |
| ;require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
| var supportsArgumentsClass = (function(){ | |
| return Object.prototype.toString.call(arguments) | |
| })() == '[object Arguments]'; | |
| exports = module.exports = supportsArgumentsClass ? supported : unsupported; | |
| exports.supported = supported; | |
| function supported(object) { | |
| return Object.prototype.toString.call(object) == '[object Arguments]'; | |
| }; | |
| exports.unsupported = unsupported; | |
| function unsupported(object){ | |
| return object && | |
| typeof object == 'object' && | |
| typeof object.length == 'number' && | |
| Object.prototype.hasOwnProperty.call(object, 'callee') && | |
| !Object.prototype.propertyIsEnumerable.call(object, 'callee') || | |
| false; | |
| }; | |
| },{}],2:[function(require,module,exports){ | |
| exports = module.exports = typeof Object.keys === 'function' | |
| ? Object.keys : shim; | |
| exports.shim = shim; | |
| function shim (obj) { | |
| var keys = []; | |
| for (var key in obj) keys.push(key); | |
| return keys; | |
| } | |
| },{}],"deep-equal":[function(require,module,exports){ | |
| var pSlice = Array.prototype.slice; | |
| var objectKeys = require('./lib/keys.js'); | |
| var isArguments = require('./lib/is_arguments.js'); | |
| var deepEqual = module.exports = function (actual, expected, opts) { | |
| if (!opts) opts = {}; | |
| // 7.1. All identical values are equivalent, as determined by ===. | |
| if (actual === expected) { | |
| return true; | |
| } else if (actual instanceof Date && expected instanceof Date) { | |
| return actual.getTime() === expected.getTime(); | |
| // 7.3. Other pairs that do not both pass typeof value == 'object', | |
| // equivalence is determined by ==. | |
| } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') { | |
| return opts.strict ? actual === expected : actual == expected; | |
| // 7.4. For all other Object pairs, including Array objects, equivalence is | |
| // determined by having the same number of owned properties (as verified | |
| // with Object.prototype.hasOwnProperty.call), the same set of keys | |
| // (although not necessarily the same order), equivalent values for every | |
| // corresponding key, and an identical 'prototype' property. Note: this | |
| // accounts for both named and indexed properties on Arrays. | |
| } else { | |
| return objEquiv(actual, expected, opts); | |
| } | |
| } | |
| function isUndefinedOrNull(value) { | |
| return value === null || value === undefined; | |
| } | |
| function isBuffer (x) { | |
| if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; | |
| if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { | |
| return false; | |
| } | |
| if (x.length > 0 && typeof x[0] !== 'number') return false; | |
| return true; | |
| } | |
| function objEquiv(a, b, opts) { | |
| var i, key; | |
| if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) | |
| return false; | |
| // an identical 'prototype' property. | |
| if (a.prototype !== b.prototype) return false; | |
| //~~~I've managed to break Object.keys through screwy arguments passing. | |
| // Converting to array solves the problem. | |
| if (isArguments(a)) { | |
| if (!isArguments(b)) { | |
| return false; | |
| } | |
| a = pSlice.call(a); | |
| b = pSlice.call(b); | |
| return deepEqual(a, b, opts); | |
| } | |
| if (isBuffer(a)) { | |
| if (!isBuffer(b)) { | |
| return false; | |
| } | |
| if (a.length !== b.length) return false; | |
| for (i = 0; i < a.length; i++) { | |
| if (a[i] !== b[i]) return false; | |
| } | |
| return true; | |
| } | |
| try { | |
| var ka = objectKeys(a), | |
| kb = objectKeys(b); | |
| } catch (e) {//happens when one is a string literal and the other isn't | |
| return false; | |
| } | |
| // having the same number of owned properties (keys incorporates | |
| // hasOwnProperty) | |
| if (ka.length != kb.length) | |
| return false; | |
| //the same set of keys (although not necessarily the same order), | |
| ka.sort(); | |
| kb.sort(); | |
| //~~~cheap key test | |
| for (i = ka.length - 1; i >= 0; i--) { | |
| if (ka[i] != kb[i]) | |
| return false; | |
| } | |
| //equivalent values for every corresponding key, and | |
| //~~~possibly expensive deep test | |
| for (i = ka.length - 1; i >= 0; i--) { | |
| key = ka[i]; | |
| if (!deepEqual(a[key], b[key], opts)) return false; | |
| } | |
| return typeof a === typeof b; | |
| } | |
| },{"./lib/is_arguments.js":1,"./lib/keys.js":2}]},{},[]) | |
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi91c3IvbGliL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvdG1wL2RlZXAtZXF1YWwxMTYzMjItMTQ2MTQtYmwxZGYwL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCIvdG1wL2RlZXAtZXF1YWwxMTYzMjItMTQ2MTQtYmwxZGYwL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9rZXlzLmpzIiwiL3RtcC9kZWVwLWVxdWFsMTE2MzIyLTE0NjE0LWJsMWRmMC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJ2YXIgc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA9IChmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50cylcbn0pKCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPyBzdXBwb3J0ZWQgOiB1bnN1cHBvcnRlZDtcblxuZXhwb3J0cy5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7XG5mdW5jdGlvbiBzdXBwb3J0ZWQob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn07XG5cbmV4cG9ydHMudW5zdXBwb3J0ZWQgPSB1bnN1cHBvcnRlZDtcbmZ1bmN0aW9uIHVuc3VwcG9ydGVkKG9iamVjdCl7XG4gIHJldHVybiBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnY2FsbGVlJykgJiZcbiAgICAhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpIHx8XG4gICAgZmFsc2U7XG59O1xuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iXX0= | |
| // Welcome! require() some modules from npm (like you were using browserify) | |
| // and then hit Run Code to run your code on the right side. | |
| // Modules get downloaded from browserify-cdn and bundled in your browser. | |
| var deepEqual = require('deep-equal'); | |
| function log(data) { | |
| data = data || ''; | |
| document.getElementById('result').innerHTML += data + '<br>'; | |
| } | |
| let asdf = { z: 'a', x: 'b' }; | |
| // let obj = { a: 1, b: 2, asdf: asdf }; | |
| let obj = { a: 1, b: 2 }; | |
| let state = { | |
| name: 'test', | |
| data: obj, | |
| }; | |
| let state2 = Object.assign({}, state); | |
| let state3 = Object.assign({}, state); | |
| let state4 = Object.assign({}, state); | |
| state3.data.b = 3; | |
| // state3.data.asdf.z = 'b'; | |
| state4.data = { a: 1, b: 3 }; | |
| log('state: ' + JSON.stringify(state)); | |
| log('state2:' + JSON.stringify(state2)); | |
| log('state3:' + JSON.stringify(state3)); | |
| log('state4:' + JSON.stringify(state4)); | |
| log(); | |
| const MAX = Math.pow(10, 5); | |
| var n = 1234; | |
| var t, startTime, endTime, equal; | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state2); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state2) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state3); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state3) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = deepEqual(state, state4); | |
| } | |
| endTime = Date.now(); | |
| log('deepEqual(state, state4) = ' + equal + '; time: ' + String(endTime - startTime)); | |
| log(); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = state === state || JSON.stringify(state) === JSON.stringify(state); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state) = ' + equal + "; time: " + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = JSON.stringify(state) === JSON.stringify(state2); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state2) = ' + equal + "; time: " + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = JSON.stringify(state) === JSON.stringify(state3); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state3) = ' + equal + "; time: " + String(endTime - startTime)); | |
| startTime = Date.now(); | |
| for (let i = 0; i < MAX; i++) { | |
| equal = JSON.stringify(state) === JSON.stringify(state4); | |
| } | |
| endTime = Date.now(); | |
| log('JSON.stringify(state) === JSON.stringify(state4) = ' + equal + "; time: " + String(endTime - startTime)); | |
| ;}, 0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "name": "requirebin-sketch", | |
| "version": "1.0.0", | |
| "dependencies": { | |
| "deep-equal": "1.0.1" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- contents of this file will be placed inside the <body> --> | |
| <div id='result'></div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- contents of this file will be placed inside the <head> --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment