underscore-source 0.4.4 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,7 @@
|
|
31
31
|
if (typeof exports !== 'undefined') exports._ = _;
|
32
32
|
|
33
33
|
// Current version.
|
34
|
-
_.VERSION = '0.4.
|
34
|
+
_.VERSION = '0.4.5';
|
35
35
|
|
36
36
|
/*------------------------ Collection Functions: ---------------------------*/
|
37
37
|
|
@@ -156,7 +156,7 @@
|
|
156
156
|
|
157
157
|
// Invoke a method with arguments on every item in a collection.
|
158
158
|
_.invoke = function(obj, method) {
|
159
|
-
var args = _.
|
159
|
+
var args = _.rest(arguments, 2);
|
160
160
|
return _.map(obj, function(value) {
|
161
161
|
return (method ? value[method] : value).apply(value, args);
|
162
162
|
});
|
@@ -228,9 +228,17 @@
|
|
228
228
|
|
229
229
|
/*-------------------------- Array Functions: ------------------------------*/
|
230
230
|
|
231
|
-
// Get the first element of an array.
|
232
|
-
|
233
|
-
|
231
|
+
// Get the first element of an array. Passing "n" will return the first N
|
232
|
+
// values in the array. Aliased as "head".
|
233
|
+
_.first = function(array, n) {
|
234
|
+
return n ? Array.prototype.slice.call(array, 0, n) : array[0];
|
235
|
+
};
|
236
|
+
|
237
|
+
// Returns everything but the first entry of the array. Aliased as "tail".
|
238
|
+
// Especially useful on the arguments object. Passing an "index" will return
|
239
|
+
// the rest of the values in the array from that index onward.
|
240
|
+
_.rest = function(array, index) {
|
241
|
+
return Array.prototype.slice.call(array, _.isUndefined(index) ? 1 : index);
|
234
242
|
};
|
235
243
|
|
236
244
|
// Get the last element of an array.
|
@@ -254,7 +262,7 @@
|
|
254
262
|
|
255
263
|
// Return a version of the array that does not contain the specified value(s).
|
256
264
|
_.without = function(array) {
|
257
|
-
var values =
|
265
|
+
var values = _.rest(arguments);
|
258
266
|
return _.select(array, function(value){ return !_.include(values, value); });
|
259
267
|
};
|
260
268
|
|
@@ -270,7 +278,7 @@
|
|
270
278
|
// Produce an array that contains every item shared between all the
|
271
279
|
// passed-in arrays.
|
272
280
|
_.intersect = function(array) {
|
273
|
-
var rest = _.
|
281
|
+
var rest = _.rest(arguments);
|
274
282
|
return _.select(_.uniq(array), function(item) {
|
275
283
|
return _.all(rest, function(other) {
|
276
284
|
return _.indexOf(other, item) >= 0;
|
@@ -311,20 +319,17 @@
|
|
311
319
|
// Create a function bound to a given object (assigning 'this', and arguments,
|
312
320
|
// optionally). Binding with arguments is also known as 'curry'.
|
313
321
|
_.bind = function(func, context) {
|
314
|
-
|
315
|
-
var args = _.toArray(arguments).slice(2);
|
322
|
+
var args = _.rest(arguments, 2);
|
316
323
|
return function() {
|
317
|
-
|
318
|
-
return func.apply(context, a);
|
324
|
+
return func.apply(context || root, args.concat(_.toArray(arguments)));
|
319
325
|
};
|
320
326
|
};
|
321
327
|
|
322
328
|
// Bind all of an object's methods to that object. Useful for ensuring that
|
323
329
|
// all callbacks defined on an object belong to it.
|
324
330
|
_.bindAll = function() {
|
325
|
-
var
|
326
|
-
|
327
|
-
_.each(args, function(methodName) {
|
331
|
+
var context = Array.prototype.pop.call(arguments);
|
332
|
+
_.each(arguments, function(methodName) {
|
328
333
|
context[methodName] = _.bind(context[methodName], context);
|
329
334
|
});
|
330
335
|
};
|
@@ -332,14 +337,14 @@
|
|
332
337
|
// Delays a function for the given number of milliseconds, and then calls
|
333
338
|
// it with the arguments supplied.
|
334
339
|
_.delay = function(func, wait) {
|
335
|
-
var args = _.
|
340
|
+
var args = _.rest(arguments, 2);
|
336
341
|
return setTimeout(function(){ return func.apply(func, args); }, wait);
|
337
342
|
};
|
338
343
|
|
339
344
|
// Defers a function, scheduling it to run after the current call stack has
|
340
345
|
// cleared.
|
341
346
|
_.defer = function(func) {
|
342
|
-
return _.delay.apply(_, [func, 1].concat(_.
|
347
|
+
return _.delay.apply(_, [func, 1].concat(_.rest(arguments)));
|
343
348
|
};
|
344
349
|
|
345
350
|
// Returns the first function passed as an argument to the second,
|
@@ -507,6 +512,8 @@
|
|
507
512
|
_.filter = _.select;
|
508
513
|
_.every = _.all;
|
509
514
|
_.some = _.any;
|
515
|
+
_.head = _.first;
|
516
|
+
_.tail = _.rest;
|
510
517
|
_.methods = _.functions;
|
511
518
|
|
512
519
|
/*------------------------ Setup the OOP Wrapper: --------------------------*/
|