diff --git a/ejson.js b/ejson.js index 10aecb5..5a7985f 100644 --- a/ejson.js +++ b/ejson.js @@ -1,5 +1,5 @@ var EJSON = exports; // Global! -var _ = require('underscore'); +var _ = require('lodash'); EJSON.ObjectID = require('./objectid.js'); @@ -219,14 +219,14 @@ var builtinConverters = [ }, toJSONValue: function (obj) { var newObj = {}; - _.each(obj, function (value, key) { + _.forOwn(obj, function (value, key) { newObj[key] = EJSON.toJSONValue(value); }); return {$escape: newObj}; }, fromJSONValue: function (obj) { var newObj = {}; - _.each(obj.$escape, function (value, key) { + _.forOwn(obj.$escape, function (value, key) { newObj[key] = EJSON.fromJSONValue(value); }); return newObj; @@ -275,7 +275,7 @@ EJSON._adjustTypesToJSONValue = function (obj) { return obj; // Iterate over array or object structure. - _.each(obj, function (value, key) { + _.forOwn(obj, function (value, key) { if (typeof value !== 'object' && value !== undefined && !isInfOrNan(value)) return; // continue @@ -331,7 +331,7 @@ EJSON._adjustTypesFromJSONValue = function (obj) { if (typeof obj !== 'object') return obj; - _.each(obj, function (value, key) { + _.forOwn(obj, function (value, key) { if (typeof value === 'object') { var changed = fromJSONValueHelper(value); if (value !== changed) { @@ -445,10 +445,7 @@ EJSON.equals = function (a, b, options) { // fall back to structural equality of objects var ret; if (keyOrderSensitive) { - var bKeys = []; - _.each(b, function (val, x) { - bKeys.push(x); - }); + var bKeys = _.keys(b); i = 0; ret = _.all(a, function (val, x) { if (i >= bKeys.length) { @@ -518,9 +515,8 @@ EJSON.clone = function (v) { } // handle other objects ret = {}; - _.each(v, function (value, key) { + _.forOwn(v, function (value, key) { ret[key] = EJSON.clone(value); }); return ret; }; - diff --git a/ejson_test.js b/ejson_test.js index 56722fe..e449b6d 100644 --- a/ejson_test.js +++ b/ejson_test.js @@ -1,5 +1,19 @@ var EJSON = require("./ejson.js"); -var _ = require("underscore"); +var _ = require("lodash").runInContext(); + +var reTypedArray = /^\[object \w+Array\]$/, + toString = Object.prototype.toString; + +_.mixin({ + "isTypedArray": function(value) { + return value && typeof value == "object" && reTypedArray.test(toString.call(value)) || false; + }, + "isEqual": _.wrap(_.isEqual, function(func, value, other, callback) { + value = _.isTypedArray(value) ? Array.apply(null, value) : value; + other = _.isTypedArray(other) ? Array.apply(null, other) : other; + return func(value, other, callback); + }) +}); var prepareTest = function (test) { test.isTrue = test.ok; diff --git a/package.json b/package.json index c05aaa8..47138d6 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "license": "MIT", "readmeFilename": "README.md", "dependencies": { - "underscore": "1.5.2" + "lodash": "2.4.1" }, "devDependencies": { "test": "~0.6.0"