From 36ca8c1cc597b03109ff8106caaa71408c8776fc Mon Sep 17 00:00:00 2001 From: tjmehta Date: Mon, 7 Mar 2016 23:33:10 -0800 Subject: [PATCH] omit support keypaths, remove use of clone --- omit.js | 14 ++++++++------ test/test-omit.js | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/omit.js b/omit.js index 6e56c35..113b40d 100644 --- a/omit.js +++ b/omit.js @@ -3,7 +3,8 @@ */ var isObject = require('./is-object'); -var clone = require('./clone'); +var pick = require('./pick') +var keypather = require('keypather')() /** * Returns a new object without the specified keys. @@ -27,17 +28,18 @@ module.exports = function () { }; function omit (obj, args) { - var keys = []; + var omitKeys = []; args.forEach(function (key) { - keys = keys.concat(key); + omitKeys = omitKeys.concat(key); }); - var out = clone(obj); - keys.forEach(remove(out)); + var keys = Object.keys(obj); + var out = pick(obj, keys); + omitKeys.forEach(remove(out)); return out; } function remove (obj) { return function (key) { - delete obj[key]; + keypather.del(obj, key); }; } diff --git a/test/test-omit.js b/test/test-omit.js index 4ea3ea6..8210dd1 100644 --- a/test/test-omit.js +++ b/test/test-omit.js @@ -112,6 +112,31 @@ describe('omit', function () { goo: 3 } ]); + var objs2 = [ + { + bar: 1 + }, + { + foo: { bar: 2 }, + bar: 2, + qux: 2 + }, + { + foo: { bar: 3 }, + bar: 3, + koo: 3, + goo: 3 + } + ]; + expect(objs2.map(omit(['foo.bar', 'bar'], ['qux']))).to.deep.equal([ + {}, + { foo: {} }, + { + foo: {}, + koo: 3, + goo: 3 + } + ]); expect(objs.map(omit())).to.deep.equal(objs); expect(objs.map(omit([]))).to.deep.equal(objs); done();