|
94 | 94 | return cb(value, context, Infinity); |
95 | 95 | }; |
96 | 96 |
|
97 | | - // An internal function for creating assigner functions. |
98 | | - var createAssigner = function(keysFunc, undefinedOnly) { |
99 | | - return function(obj) { |
100 | | - var length = arguments.length; |
101 | | - if (length < 2 || obj == null) return obj; |
102 | | - for (var index = 1; index < length; index++) { |
103 | | - var source = arguments[index], |
104 | | - keys = keysFunc(source), |
105 | | - l = keys.length; |
106 | | - for (var i = 0; i < l; i++) { |
107 | | - var key = keys[i]; |
108 | | - if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; |
109 | | - } |
110 | | - } |
111 | | - return obj; |
112 | | - }; |
113 | | - }; |
114 | | - |
115 | 97 | // An internal function for creating a new object that inherits from another. |
116 | 98 | var baseCreate = function(prototype) { |
117 | 99 | if (!_.isObject(prototype)) return {}; |
|
175 | 157 | }; |
176 | 158 |
|
177 | 159 | // Create a reducing function iterating left or right. |
178 | | - function createReduce(dir) { |
| 160 | + var createReduce = function(dir) { |
179 | 161 | // Optimized iterator function as using arguments.length |
180 | 162 | // in the main function will deoptimize the, see #1991. |
181 | | - function iterator(obj, iteratee, memo, keys, index, length) { |
| 163 | + var iterator = function(obj, iteratee, memo, keys, index, length) { |
182 | 164 | for (; index >= 0 && index < length; index += dir) { |
183 | 165 | var currentKey = keys ? keys[index] : index; |
184 | 166 | memo = iteratee(memo, obj[currentKey], currentKey, obj); |
185 | 167 | } |
186 | 168 | return memo; |
187 | | - } |
| 169 | + }; |
188 | 170 |
|
189 | 171 | return function(obj, iteratee, memo, context) { |
190 | 172 | iteratee = optimizeCb(iteratee, context, 4); |
|
198 | 180 | } |
199 | 181 | return iterator(obj, iteratee, memo, keys, index, length); |
200 | 182 | }; |
201 | | - } |
| 183 | + }; |
202 | 184 |
|
203 | 185 | // **Reduce** builds up a single result from a list of values, aka `inject`, |
204 | 186 | // or `foldl`. |
|
606 | 588 | }; |
607 | 589 |
|
608 | 590 | // Generator function to create the findIndex and findLastIndex functions |
609 | | - function createPredicateIndexFinder(dir) { |
| 591 | + var createPredicateIndexFinder = function(dir) { |
610 | 592 | return function(array, predicate, context) { |
611 | 593 | predicate = cb(predicate, context); |
612 | 594 | var length = getLength(array); |
|
616 | 598 | } |
617 | 599 | return -1; |
618 | 600 | }; |
619 | | - } |
| 601 | + }; |
620 | 602 |
|
621 | 603 | // Returns the first index on an array-like that passes a predicate test |
622 | 604 | _.findIndex = createPredicateIndexFinder(1); |
|
636 | 618 | }; |
637 | 619 |
|
638 | 620 | // Generator function to create the indexOf and lastIndexOf functions |
639 | | - function createIndexFinder(dir, predicateFind, sortedIndex) { |
| 621 | + var createIndexFinder = function(dir, predicateFind, sortedIndex) { |
640 | 622 | return function(array, item, idx) { |
641 | 623 | var i = 0, length = getLength(array); |
642 | 624 | if (typeof idx == 'number') { |
|
658 | 640 | } |
659 | 641 | return -1; |
660 | 642 | }; |
661 | | - } |
| 643 | + }; |
662 | 644 |
|
663 | 645 | // Return the position of the first occurrence of an item in an array, |
664 | 646 | // or -1 if the item is not included in the array. |
|
901 | 883 | var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', |
902 | 884 | 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; |
903 | 885 |
|
904 | | - function collectNonEnumProps(obj, keys) { |
| 886 | + var collectNonEnumProps = function(obj, keys) { |
905 | 887 | var nonEnumIdx = nonEnumerableProps.length; |
906 | 888 | var constructor = obj.constructor; |
907 | 889 | var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; |
|
916 | 898 | keys.push(prop); |
917 | 899 | } |
918 | 900 | } |
919 | | - } |
| 901 | + }; |
920 | 902 |
|
921 | 903 | // Retrieve the names of an object's own properties. |
922 | 904 | // Delegates to **ECMAScript 5**'s native `Object.keys` |
|
997 | 979 | return names.sort(); |
998 | 980 | }; |
999 | 981 |
|
| 982 | + // An internal function for creating assigner functions. |
| 983 | + var createAssigner = function(keysFunc, undefinedOnly) { |
| 984 | + return function(obj) { |
| 985 | + var length = arguments.length; |
| 986 | + if (length < 2 || obj == null) return obj; |
| 987 | + for (var index = 1; index < length; index++) { |
| 988 | + var source = arguments[index], |
| 989 | + keys = keysFunc(source), |
| 990 | + l = keys.length; |
| 991 | + for (var i = 0; i < l; i++) { |
| 992 | + var key = keys[i]; |
| 993 | + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; |
| 994 | + } |
| 995 | + } |
| 996 | + return obj; |
| 997 | + }; |
| 998 | + }; |
| 999 | + |
1000 | 1000 | // Extend a given object with all the properties in passed-in object(s). |
1001 | 1001 | _.extend = createAssigner(_.allKeys); |
1002 | 1002 |
|
|
0 commit comments