diff --git a/index.html b/index.html index 7cabf46e6..f38ffa8ab 100644 --- a/index.html +++ b/index.html @@ -214,6 +214,7 @@
- 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.