mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-02 16:17:50 +00:00
Sync underscore build with Underscore v1.5.1.
Former-commit-id: 333f720645f5ffec079bfe11558ed72a3956ed18
This commit is contained in:
64
build.js
64
build.js
@@ -2944,7 +2944,7 @@
|
||||
if (!isLodash('toArray')) {
|
||||
funcDepMap.toArray.push('isArray', 'map');
|
||||
}
|
||||
if (!isLodash('findWhere') || !isLodash('where')) {
|
||||
if (!isLodash('findWhere') && !isLodash('where')) {
|
||||
_.pull(funcDepMap.createCallback, 'baseIsEqual');
|
||||
funcDepMap.where.push('find', 'isEmpty');
|
||||
}
|
||||
@@ -3483,7 +3483,7 @@
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// add Underscore's `_.findWhere`
|
||||
// add Underscore's `_.findWhere` and `_.where`
|
||||
if (!isLodash('findWhere') && !isLodash('where')) {
|
||||
source = source.replace(matchFunction(source, 'find'), function(match) {
|
||||
var indent = getIndent(match);
|
||||
@@ -3519,6 +3519,24 @@
|
||||
].join('\n' + indent));
|
||||
});
|
||||
|
||||
// replace `_.where`
|
||||
source = replaceFunction(source, 'where', [
|
||||
'function where(collection, properties, first) {',
|
||||
' return (first && isEmpty(properties))',
|
||||
' ? undefined',
|
||||
' : (first ? find : filter)(collection, properties);',
|
||||
'}'
|
||||
].join('\n'));
|
||||
|
||||
// simplify `_.createCallback`
|
||||
source = source.replace(matchFunction(source, 'createCallback'), function(match) {
|
||||
return match
|
||||
// remove unnecessary fast path
|
||||
.replace(/^(( *)var props *=.+?),[\s\S]+?\n\2}/m, '$1;')
|
||||
// remove `baseIsEqual` use
|
||||
.replace(/=.+?\bbaseIsEqual\((.+?), *(.+?),.+?\)/, '= $1 === $2');
|
||||
});
|
||||
|
||||
// replace alias assignment
|
||||
source = source.replace(getMethodAssignments(source), function(match) {
|
||||
return match.replace(/^( *lodash.findWhere *= *).+/m, '$1findWhere;');
|
||||
@@ -3737,15 +3755,6 @@
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// replace `_.result`
|
||||
if (!isLodash('result')) {
|
||||
source = replaceFunction(source, 'result', [
|
||||
'function result(object, property) {',
|
||||
' var value = object ? object[property] : undefined;',
|
||||
' return isFunction(value) ? object[property]() : value;',
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// replace `_.sortBy`
|
||||
if (!isLodash('sortBy')) {
|
||||
source = replaceFunction(source, 'sortBy', [
|
||||
@@ -3854,20 +3863,6 @@
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// replace `_.times`
|
||||
if (!isLodash('times')) {
|
||||
source = replaceFunction(source, 'times', [
|
||||
'function times(n, callback, thisArg) {',
|
||||
' var index = -1,',
|
||||
' result = Array(n > -1 ? n : 0);',
|
||||
'',
|
||||
' while (++index < n) {',
|
||||
' result[index] = callback.call(thisArg, index);',
|
||||
' }',
|
||||
' return result;',
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// replace `_.toArray`
|
||||
if (!isLodash('toArray')) {
|
||||
source = replaceFunction(source, 'toArray', [
|
||||
@@ -3919,25 +3914,6 @@
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// replace `_.where`
|
||||
if (!isLodash('where')) {
|
||||
source = replaceFunction(source, 'where', [
|
||||
'function where(collection, properties, first) {',
|
||||
' return (first && isEmpty(properties))',
|
||||
' ? undefined',
|
||||
' : (first ? find : filter)(collection, properties);',
|
||||
'}'
|
||||
].join('\n'));
|
||||
|
||||
// simplify `_.createCallback`
|
||||
source = source.replace(matchFunction(source, 'createCallback'), function(match) {
|
||||
return match
|
||||
// remove unnecessary fast path
|
||||
.replace(/^(( *)var props *=.+?),[\s\S]+?\n\2}/m, '$1;')
|
||||
// remove `baseIsEqual` use
|
||||
.replace(/=.+?\bbaseIsEqual\((.+?), *(.+?),.+?\)/, '= $1 === $2');
|
||||
});
|
||||
}
|
||||
// replace `_.zip`
|
||||
if(!isLodash('zip')) {
|
||||
source = replaceFunction(source, 'zip', [
|
||||
|
||||
6
dist/lodash.underscore.js
vendored
6
dist/lodash.underscore.js
vendored
@@ -4309,11 +4309,13 @@
|
||||
* // => also calls `mage.castSpell(n)` three times
|
||||
*/
|
||||
function times(n, callback, thisArg) {
|
||||
n = (n = +n) > -1 ? n : 0;
|
||||
var index = -1,
|
||||
result = Array(n > -1 ? n : 0);
|
||||
result = Array(n);
|
||||
|
||||
callback = baseCreateCallback(callback, thisArg, 1);
|
||||
while (++index < n) {
|
||||
result[index] = callback.call(thisArg, index);
|
||||
result[index] = callback(index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
2
dist/lodash.underscore.min.js
vendored
2
dist/lodash.underscore.min.js
vendored
@@ -28,7 +28,7 @@ u&&e.push(u)}return e},u.compose=function(){for(var n=arguments,r=n.length||1;r-
|
||||
return R(n,function(n){o[++e]=(u?r:n[r]).apply(n,t)}),o},u.keys=Ur,u.map=D,u.max=k,u.memoize=function(n,r){var t={};return function(){var e=rr+(r?r.apply(this,arguments):arguments[0]);return Er.call(t,e)?t[e]:t[e]=n.apply(this,arguments)}},u.min=function(n,r,t){var e=1/0,u=e,i=-1,o=n?n.length:0;if(r||typeof o!="number")r=J(r,t,3),R(n,function(n,t,i){t=r(n,t,i),t<e&&(e=t,u=n)});else for(;++i<o;)t=n[i],t<u&&(u=t);return u},u.omit=function(n){var r=h(),t=f(arguments,!0,!1,1),e={};return Kr(n,function(n,u){0>r(t,u)&&(e[u]=n)
|
||||
}),e},u.once=function(n){var r,t;if(!j(n))throw new TypeError;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},u.pairs=function(n){for(var r=-1,t=Ur(n),e=t.length,u=Array(e);++r<e;){var i=t[r];u[r]=[i,n[i]]}return u},u.partial=function(n){return p(n,16,$r.call(arguments,1))},u.pick=function(n){for(var r=-1,t=f(arguments,!0,!1,1),e=t.length,u={};++r<e;){var i=t[r];i in n&&(u[i]=n[i])}return u},u.pluck=q,u.range=function(n,r,t){n=+n||0,t=+t||1,null==r&&(r=n,n=0);var e=-1;r=kr(0,jr((r-n)/t));
|
||||
for(var u=Array(r);++e<r;)u[e]=n,n+=t;return u},u.reject=function(n,r,t){return r=J(r,t,3),F(n,function(n,t,e){return!r(n,t,e)})},u.rest=U,u.shuffle=function(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return R(n,function(n){var t=X(++r);e[r]=e[t],e[t]=n}),e},u.sortBy=function(n,t,e){var u=-1,i=n?n.length:0,o=Array(typeof i=="number"?i:0);for(t=J(t,e,3),R(n,function(n,r,e){o[++u]={l:t(n,r,e),m:u,n:n}}),i=o.length,o.sort(r);i--;)o[i]=o[i].n;return o},u.tap=function(n,r){return r(n),n
|
||||
},u.throttle=function(n,r,t){var e=!0,u=!0;return false===t?e=!1:x(t)&&(e="leading"in t?t.leading:e,u="trailing"in t?t.trailing:u),t={},t.leading=e,t.maxWait=r,t.trailing=u,K(n,r,t)},u.times=function(n,r,t){for(var e=-1,u=Array(-1<n?n:0);++e<n;)u[e]=r.call(t,e);return u},u.toArray=function(n){return Cr(n)?$r.call(n):n&&typeof n.length=="number"?D(n):T(n)},u.union=function(){return l(f(arguments,!0,!0))},u.uniq=G,u.values=T,u.where=W,u.without=function(n){return z(n,$r.call(arguments,1))},u.wrap=function(n,r){if(!j(r))throw new TypeError;
|
||||
},u.throttle=function(n,r,t){var e=!0,u=!0;return false===t?e=!1:x(t)&&(e="leading"in t?t.leading:e,u="trailing"in t?t.trailing:u),t={},t.leading=e,t.maxWait=r,t.trailing=u,K(n,r,t)},u.times=function(n,r,t){n=-1<(n=+n)?n:0;var e=-1,u=Array(n);for(r=o(r,t,1);++e<n;)u[e]=r(e);return u},u.toArray=function(n){return Cr(n)?$r.call(n):n&&typeof n.length=="number"?D(n):T(n)},u.union=function(){return l(f(arguments,!0,!0))},u.uniq=G,u.values=T,u.where=W,u.without=function(n){return z(n,$r.call(arguments,1))},u.wrap=function(n,r){if(!j(r))throw new TypeError;
|
||||
return function(){var t=[n];return Ar.apply(t,arguments),r.apply(this,t)}},u.zip=function(){for(var n=-1,r=k(q(arguments,"length")),t=Array(0>r?0:r);++n<r;)t[n]=q(arguments,n);return t},u.collect=D,u.drop=U,u.each=R,u.extend=m,u.methods=d,u.object=function(n,r){for(var t=-1,e=n?n.length:0,u={};++t<e;){var i=n[t];r?u[i]=r[t]:i&&(u[i[0]]=i[1])}return u},u.select=F,u.tail=U,u.unique=G,u.clone=function(n){return x(n)?Cr(n)?$r.call(n):m({},n):n},u.contains=O,u.escape=function(n){return null==n?"":(n+"").replace(Jr,v)
|
||||
},u.every=S,u.find=N,u.has=function(n,r){return n?Er.call(n,r):!1},u.identity=L,u.indexOf=P,u.isArguments=y,u.isArray=Cr,u.isBoolean=function(n){return true===n||false===n||Tr.call(n)==or},u.isDate=function(n){return n?typeof n=="object"&&Tr.call(n)==fr:!1},u.isElement=function(n){return n?1===n.nodeType:!1},u.isEmpty=w,u.isEqual=function(n,r){return a(n,r)},u.isFinite=function(n){return Rr(n)&&!Br(parseFloat(n))},u.isFunction=j,u.isNaN=function(n){return E(n)&&n!=+n},u.isNull=function(n){return null===n
|
||||
},u.isNumber=E,u.isObject=x,u.isRegExp=function(n){return n&&sr[typeof n]?Tr.call(n)==cr:!1},u.isString=A,u.isUndefined=function(n){return typeof n=="undefined"},u.lastIndexOf=function(n,r,t){var e=n?n.length:0;for(typeof t=="number"&&(e=(0>t?kr(0,e+t):qr(t,e-1))+1);e--;)if(n[e]===r)return e;return-1},u.mixin=Q,u.noConflict=function(){return hr._=br,this},u.random=X,u.reduce=M,u.reduceRight=$,u.result=function(n,r){var t=n?n[r]:Y;return j(t)?n[r]():t},u.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:Ur(n).length
|
||||
|
||||
@@ -1096,7 +1096,6 @@
|
||||
|
||||
deepEqual(lodash.range(1, 4, 0), [1, 2, 3], '_.range should not support a `step` of `0`');
|
||||
strictEqual(lodash.some([false, true, false]), true, '_.some: ' + basename);
|
||||
deepEqual(lodash.times(null, function() {}), [null], '_.times should not coerce `n` to a number: ' + basename);
|
||||
equal(lodash.template('${a}', object), '${a}', '_.template should ignore ES6 delimiters: ' + basename);
|
||||
equal('support' in lodash, false, '_.support should not exist: ' + basename);
|
||||
equal('imports' in lodash.templateSettings, false, '_.templateSettings should not have an "imports" property: ' + basename);
|
||||
|
||||
6
vendor/underscore/test/collections.js
vendored
6
vendor/underscore/test/collections.js
vendored
@@ -274,12 +274,6 @@ $(document).ready(function() {
|
||||
deepEqual(result, {a: 1, b: 2});
|
||||
result = _.findWhere(list, {b: 4});
|
||||
deepEqual(result, {a: 1, b: 4});
|
||||
|
||||
result = _.findWhere(list, {c:1})
|
||||
ok(_.isUndefined(result), "undefined when not found");
|
||||
|
||||
result = _.findWhere([], {c:1});
|
||||
ok(_.isUndefined(result), "undefined when searching empty list");
|
||||
});
|
||||
|
||||
test('max', function() {
|
||||
|
||||
12
vendor/underscore/test/functions.js
vendored
12
vendor/underscore/test/functions.js
vendored
@@ -159,14 +159,14 @@ $(document).ready(function() {
|
||||
asyncTest("throttle repeatedly with results", 6, function() {
|
||||
var counter = 0;
|
||||
var incr = function(){ return ++counter; };
|
||||
var throttledIncr = _.throttle(incr, 100);
|
||||
var throttledIncr = _.throttle(incr, 64);
|
||||
var results = [];
|
||||
var saveResult = function() { results.push(throttledIncr()); };
|
||||
saveResult(); saveResult();
|
||||
_.delay(saveResult, 50);
|
||||
_.delay(saveResult, 150);
|
||||
_.delay(saveResult, 160);
|
||||
_.delay(saveResult, 230);
|
||||
_.delay(saveResult, 32);
|
||||
_.delay(saveResult, 80);
|
||||
_.delay(saveResult, 96);
|
||||
_.delay(saveResult, 144);
|
||||
_.delay(function() {
|
||||
equal(results[0], 1, "incr was called once");
|
||||
equal(results[1], 1, "incr was throttled");
|
||||
@@ -175,7 +175,7 @@ $(document).ready(function() {
|
||||
equal(results[4], 2, "incr was throttled");
|
||||
equal(results[5], 3, "incr was called trailing");
|
||||
start();
|
||||
}, 300);
|
||||
}, 192);
|
||||
});
|
||||
|
||||
asyncTest("throttle triggers trailing call when invoked repeatedly", 2, function() {
|
||||
|
||||
2
vendor/underscore/test/objects.js
vendored
2
vendor/underscore/test/objects.js
vendored
@@ -52,7 +52,7 @@ $(document).ready(function() {
|
||||
result = _.extend({x:'x'}, {a:'a', x:2}, {a:'b'});
|
||||
ok(_.isEqual(result, {x:2, a:'b'}), 'extending from multiple source objects last property trumps');
|
||||
result = _.extend({}, {a: void 0, b: null});
|
||||
equal(_.keys(result).join(''), 'ab', 'extend copies undefined values');
|
||||
equal(_.keys(result).join(''), 'ab', 'extend does not copy undefined values');
|
||||
|
||||
try {
|
||||
result = {};
|
||||
|
||||
4
vendor/underscore/underscore-min.js
vendored
4
vendor/underscore/underscore-min.js
vendored
File diff suppressed because one or more lines are too long
110
vendor/underscore/underscore.js
vendored
110
vendor/underscore/underscore.js
vendored
@@ -8,7 +8,7 @@
|
||||
// Baseline setup
|
||||
// --------------
|
||||
|
||||
// Establish the root object, `window` in the browser, or `exports` on the server.
|
||||
// Establish the root object, `window` in the browser, or `global` on the server.
|
||||
var root = this;
|
||||
|
||||
// Save the previous value of the `_` variable.
|
||||
@@ -78,13 +78,14 @@
|
||||
if (nativeForEach && obj.forEach === nativeForEach) {
|
||||
obj.forEach(iterator, context);
|
||||
} else if (obj.length === +obj.length) {
|
||||
for (var i = 0, length = obj.length; i < length; i++) {
|
||||
for (var i = 0, l = obj.length; i < l; i++) {
|
||||
if (iterator.call(context, obj[i], i, obj) === breaker) return;
|
||||
}
|
||||
} else {
|
||||
var keys = _.keys(obj);
|
||||
for (var i = 0, length = keys.length; i < length; i++) {
|
||||
if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
|
||||
for (var key in obj) {
|
||||
if (_.has(obj, key)) {
|
||||
if (iterator.call(context, obj[key], key, obj) === breaker) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -306,9 +307,9 @@
|
||||
var iterator = lookupIterator(value);
|
||||
return _.pluck(_.map(obj, function(value, index, list) {
|
||||
return {
|
||||
value: value,
|
||||
index: index,
|
||||
criteria: iterator.call(context, value, index, list)
|
||||
value : value,
|
||||
index : index,
|
||||
criteria : iterator.call(context, value, index, list)
|
||||
};
|
||||
}).sort(function(left, right) {
|
||||
var a = left.criteria;
|
||||
@@ -317,41 +318,38 @@
|
||||
if (a > b || a === void 0) return 1;
|
||||
if (a < b || b === void 0) return -1;
|
||||
}
|
||||
return left.index - right.index;
|
||||
return left.index < right.index ? -1 : 1;
|
||||
}), 'value');
|
||||
};
|
||||
|
||||
// An internal function used for aggregate "group by" operations.
|
||||
var group = function(behavior) {
|
||||
return function(obj, value, context) {
|
||||
var result = {};
|
||||
var iterator = value == null ? _.identity : lookupIterator(value);
|
||||
each(obj, function(value, index) {
|
||||
var key = iterator.call(context, value, index, obj);
|
||||
behavior(result, key, value);
|
||||
});
|
||||
return result;
|
||||
};
|
||||
var group = function(obj, value, context, behavior) {
|
||||
var result = {};
|
||||
var iterator = lookupIterator(value == null ? _.identity : value);
|
||||
each(obj, function(value, index) {
|
||||
var key = iterator.call(context, value, index, obj);
|
||||
behavior(result, key, value);
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
// Groups the object's values by a criterion. Pass either a string attribute
|
||||
// to group by, or a function that returns the criterion.
|
||||
_.groupBy = group(function(result, key, value) {
|
||||
(_.has(result, key) ? result[key] : (result[key] = [])).push(value);
|
||||
});
|
||||
|
||||
// Indexes the object's values by a criterion, similar to `groupBy`, but for
|
||||
// when you know that your index values will be unique.
|
||||
_.indexBy = group(function(result, key, value) {
|
||||
result[key] = value;
|
||||
});
|
||||
_.groupBy = function(obj, value, context) {
|
||||
return group(obj, value, context, function(result, key, value) {
|
||||
(_.has(result, key) ? result[key] : (result[key] = [])).push(value);
|
||||
});
|
||||
};
|
||||
|
||||
// Counts instances of an object that group by a certain criterion. Pass
|
||||
// either a string attribute to count by, or a function that returns the
|
||||
// criterion.
|
||||
_.countBy = group(function(result, key, value) {
|
||||
_.has(result, key) ? result[key]++ : result[key] = 1;
|
||||
});
|
||||
_.countBy = function(obj, value, context) {
|
||||
return group(obj, value, context, function(result, key) {
|
||||
if (!_.has(result, key)) result[key] = 0;
|
||||
result[key]++;
|
||||
});
|
||||
};
|
||||
|
||||
// Use a comparator function to figure out the smallest index at which
|
||||
// an object should be inserted so as to maintain order. Uses binary search.
|
||||
@@ -388,7 +386,7 @@
|
||||
// allows it to work with `_.map`.
|
||||
_.first = _.head = _.take = function(array, n, guard) {
|
||||
if (array == null) return void 0;
|
||||
return (n == null) || guard ? array[0] : slice.call(array, 0, n);
|
||||
return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
|
||||
};
|
||||
|
||||
// Returns everything but the last entry of the array. Especially useful on
|
||||
@@ -403,10 +401,10 @@
|
||||
// values in the array. The **guard** check allows it to work with `_.map`.
|
||||
_.last = function(array, n, guard) {
|
||||
if (array == null) return void 0;
|
||||
if ((n == null) || guard) {
|
||||
return array[array.length - 1];
|
||||
} else {
|
||||
if ((n != null) && !guard) {
|
||||
return slice.call(array, Math.max(array.length - n, 0));
|
||||
} else {
|
||||
return array[array.length - 1];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -438,7 +436,7 @@
|
||||
return output;
|
||||
};
|
||||
|
||||
// Flatten out an array, either recursively (by default), or just one level.
|
||||
// Return a completely flattened version of an array.
|
||||
_.flatten = function(array, shallow) {
|
||||
return flatten(array, shallow, []);
|
||||
};
|
||||
@@ -510,7 +508,7 @@
|
||||
_.object = function(list, values) {
|
||||
if (list == null) return {};
|
||||
var result = {};
|
||||
for (var i = 0, length = list.length; i < length; i++) {
|
||||
for (var i = 0, l = list.length; i < l; i++) {
|
||||
if (values) {
|
||||
result[list[i]] = values[i];
|
||||
} else {
|
||||
@@ -528,17 +526,17 @@
|
||||
// for **isSorted** to use binary search.
|
||||
_.indexOf = function(array, item, isSorted) {
|
||||
if (array == null) return -1;
|
||||
var i = 0, length = array.length;
|
||||
var i = 0, l = array.length;
|
||||
if (isSorted) {
|
||||
if (typeof isSorted == 'number') {
|
||||
i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);
|
||||
i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
|
||||
} else {
|
||||
i = _.sortedIndex(array, item);
|
||||
return array[i] === item ? i : -1;
|
||||
}
|
||||
}
|
||||
if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
|
||||
for (; i < length; i++) if (array[i] === item) return i;
|
||||
for (; i < l; i++) if (array[i] === item) return i;
|
||||
return -1;
|
||||
};
|
||||
|
||||
@@ -564,11 +562,11 @@
|
||||
}
|
||||
step = arguments[2] || 1;
|
||||
|
||||
var length = Math.max(Math.ceil((stop - start) / step), 0);
|
||||
var len = Math.max(Math.ceil((stop - start) / step), 0);
|
||||
var idx = 0;
|
||||
var range = new Array(length);
|
||||
var range = new Array(len);
|
||||
|
||||
while(idx < length) {
|
||||
while(idx < len) {
|
||||
range[idx++] = start;
|
||||
start += step;
|
||||
}
|
||||
@@ -756,33 +754,22 @@
|
||||
|
||||
// Retrieve the values of an object's properties.
|
||||
_.values = function(obj) {
|
||||
var keys = _.keys(obj);
|
||||
var length = keys.length;
|
||||
var values = new Array(length);
|
||||
for (var i = 0; i < length; i++) {
|
||||
values[i] = obj[keys[i]];
|
||||
}
|
||||
var values = [];
|
||||
for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
|
||||
return values;
|
||||
};
|
||||
|
||||
// Convert an object into a list of `[key, value]` pairs.
|
||||
_.pairs = function(obj) {
|
||||
var keys = _.keys(obj);
|
||||
var length = keys.length;
|
||||
var pairs = new Array(length);
|
||||
for (var i = 0; i < length; i++) {
|
||||
pairs[i] = [keys[i], obj[keys[i]]];
|
||||
}
|
||||
var pairs = [];
|
||||
for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);
|
||||
return pairs;
|
||||
};
|
||||
|
||||
// Invert the keys and values of an object. The values must be serializable.
|
||||
_.invert = function(obj) {
|
||||
var result = {};
|
||||
var keys = _.keys(obj);
|
||||
for (var i = 0, length = keys.length; i < length; i++) {
|
||||
result[obj[keys[i]]] = keys[i];
|
||||
}
|
||||
for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
|
||||
return result;
|
||||
};
|
||||
|
||||
@@ -1066,7 +1053,8 @@
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
"'": '''
|
||||
"'": ''',
|
||||
'/': '/'
|
||||
}
|
||||
};
|
||||
entityMap.unescape = _.invert(entityMap.escape);
|
||||
@@ -1097,7 +1085,7 @@
|
||||
|
||||
// Add your own custom functions to the Underscore object.
|
||||
_.mixin = function(obj) {
|
||||
each(_.functions(obj), function(name) {
|
||||
each(_.functions(obj), function(name){
|
||||
var func = _[name] = obj[name];
|
||||
_.prototype[name] = function() {
|
||||
var args = [this._wrapped];
|
||||
|
||||
Reference in New Issue
Block a user