Simplify _.omit and _.pick for the lodash underscore build.

Former-commit-id: 9a42c964ce4003bde1b4ce55f0f851141dbc9bb6
This commit is contained in:
John-David Dalton
2012-10-13 23:32:17 -07:00
parent dea8ad4c49
commit 4b95f07923
3 changed files with 46 additions and 2 deletions

View File

@@ -70,7 +70,7 @@
'clone': ['extend', 'forEach', 'forOwn', 'isArguments', 'isPlainObject'],
'compact': [],
'compose': [],
'contains': ['some'],
'contains': ['indexOf', 'some'],
'countBy': ['forEach'],
'debounce': [],
'defaults': ['isArguments'],
@@ -975,6 +975,7 @@
if (isUnderscore) {
dependencyMap.isEqual = ['isArray', 'isFunction'];
dependencyMap.isEmpty = ['isArray', 'isString'];
dependencyMap.pick = [];
if (useUnderscoreClone) {
dependencyMap.clone = ['extend', 'isArray'];
@@ -1132,6 +1133,39 @@
' }'
].join('\n'));
// replace `_.omit`
source = source.replace(/^( +)function omit[\s\S]+?\n\1}/m, [
' function omit(object) {',
' var props = concat.apply(ArrayProto, arguments),',
' result = {};',
'',
' forIn(object, function(value, key) {',
' if (indexOf(props, key, 1) < 0) {',
' result[key] = value;',
' }',
' });',
' return result;',
' }'
].join('\n'));
// replace `_.pick`
source = source.replace(/^( +)function pick[\s\S]+?\n\1}/m, [
' function pick(object) {',
' var index = 0,',
' props = concat.apply(ArrayProto, arguments),',
' length = props.length,',
' result = {};',
'',
' while (++index < length) {',
' var prop = props[index];',
' if (prop in object) {',
' result[prop] = object[prop];',
' }',
' }',
' return result;',
' }'
].join('\n'));
// replace `_.without`
source = source.replace(/^( +)function without[\s\S]+?\n\1}/m, [
' function without(array) {',
@@ -1149,6 +1183,9 @@
' }'
].join('\n'));
// remove string support from `_.contains`
source = source.replace(/return *\(toString\.call.+?stringClass[\s\S]+?;/, 'return indexOf(collection, target) > -1;');
// replace `arrayLikeClasses` in `_.isEqual`
source = source.replace(/(?: *\/\/.*\n)*( +)var isArr *= *arrayLikeClasses[^}]+}/, '$1var isArr = isArray(a);');