From b47c21a68d8a2a8d2842512d7841c92a73dc6735 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Fri, 20 Feb 2015 00:31:06 -0500 Subject: [PATCH] Refine _.pick --- underscore.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/underscore.js b/underscore.js index 9bd0c8fd4..ab1634d33 100644 --- a/underscore.js +++ b/underscore.js @@ -988,23 +988,20 @@ // Return a copy of the object only containing the whitelisted properties. _.pick = function(obj, iteratee, context) { - var result = {}, key; + var result = {}, keys; if (obj == null) return result; if (_.isFunction(iteratee)) { + keys = _.allKeys(obj); iteratee = optimizeCb(iteratee, context); - var keys = _.allKeys(obj); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = obj[key]; - if (iteratee(value, key, obj)) result[key] = value; - } } else { - var keys = flatten(arguments, false, false, 1); - obj = new Object(obj); - for (var i = 0, length = keys.length; i < length; i++) { - key = keys[i]; - if (key in obj) result[key] = obj[key]; - } + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; } return result; };