diff --git a/index.html b/index.html index 7cabf46e6..f38ffa8ab 100644 --- a/index.html +++ b/index.html @@ -214,6 +214,7 @@
  • - values
  • - functions
  • - extend
  • +
  • - pick
  • - defaults
  • - clone
  • - tap
  • @@ -1016,16 +1017,14 @@ _.extend({name : 'moe'}, {age : 50}); => {name : 'moe', age : 50} -

    - restrict_.restrict(source, *keys) +

    + pick_.pick(object, *keys)
    - Return a clone of the source with only the properties with the - property names, or arrays of property names, provided in keys. + Return a copy of the object, filtered to only have values for + the whitelisted keys (or array of valid keys).

    -_.restrict({name : 'moe', age: 50, userid : 'moe1'}, 'name', 'age');
    -=> {name : 'moe', age : 50}
    -_.restrict({name : 'moe', age: 50, userid : 'moe1'}, ['name', 'age']);
    +_.pick({name : 'moe', age: 50, userid : 'moe1'}, 'name', 'age');
     => {name : 'moe', age : 50}
     
    diff --git a/test/objects.js b/test/objects.js index 422e75754..8fb3d1b9d 100644 --- a/test/objects.js +++ b/test/objects.js @@ -41,13 +41,13 @@ $(document).ready(function() { equal(_.keys(result).join(''), 'ab', 'extend does not copy undefined values'); }); - test("objects: restrict", function() { + test("objects: pick", function() { var result; - result = _.restrict({a:1, b:2, c:3}, 'a', 'c'); + result = _.pick({a:1, b:2, c:3}, 'a', 'c'); ok(_.isEqual(result, {a:1, c:3}), 'can restrict properties to those named'); - result = _.restrict({a:1, b:2, c:3}, ['b', 'c']); + result = _.pick({a:1, b:2, c:3}, ['b', 'c']); ok(_.isEqual(result, {b:2, c:3}), 'can restrict properties to those named in an array'); - result = _.restrict({a:1, b:2, c:3}, ['a'], 'b'); + result = _.pick({a:1, b:2, c:3}, ['a'], 'b'); ok(_.isEqual(result, {a:1, b:2}), 'can restrict properties to those named in mixed args'); }); @@ -178,7 +178,7 @@ $(document).ready(function() { // Arrays with primitive and object values. ok(_.isEqual([1, "Larry", true], [1, "Larry", true]), "Arrays containing identical primitives are equal"); - ok(_.isEqual([/Moe/g, new Date(2009, 9, 25)], [/Moe/g, new Date(2009, 9, 25)]), "Arrays containing equivalent elements are equal"); + ok(_.isEqual([(/Moe/g), new Date(2009, 9, 25)], [(/Moe/g), new Date(2009, 9, 25)]), "Arrays containing equivalent elements are equal"); // Multi-dimensional arrays. var a = [new Number(47), false, "Larry", /Moe/, new Date(2009, 11, 13), ['running', 'biking', new String('programming')], {a: 47}]; @@ -346,7 +346,7 @@ $(document).ready(function() { Date.prototype.isEqual = function(that) { var this_date_components = this.toJSON(); var that_date_components = (that instanceof Date) ? that.toJSON() : that; - delete this_date_components['_type']; delete that_date_components['_type'] + delete this_date_components['_type']; delete that_date_components['_type']; return _.isEqual(this_date_components, that_date_components); }; diff --git a/underscore.js b/underscore.js index 12423c7e5..cb2d424de 100644 --- a/underscore.js +++ b/underscore.js @@ -648,14 +648,13 @@ return obj; }; - // Restrict a given object to the properties named - _.restrict = function(obj) { - if (obj !== Object(obj)) throw new TypeError('Invalid object'); - var dest = {}; - each(_.flatten(slice.call(arguments, 1)), function(prop) { - if (prop in obj) dest[prop] = obj[prop]; + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(obj) { + var result = {}; + each(_.flatten(slice.call(arguments, 1)), function(key) { + if (key in obj) result[key] = obj[key]; }); - return dest; + return result; }; // Fill in a given object with default properties.