mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-11 19:37:49 +00:00
Add support for converting maps to _.toPairs and _.toPairsIn.
This commit is contained in:
26
lodash.js
26
lodash.js
@@ -2674,9 +2674,7 @@
|
|||||||
*/
|
*/
|
||||||
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
||||||
var result = keysFunc(object);
|
var result = keysFunc(object);
|
||||||
return isArray(object)
|
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
|
||||||
? result
|
|
||||||
: arrayPush(result, symbolsFunc(object));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -4879,6 +4877,20 @@
|
|||||||
return new Set(values);
|
return new Set(values);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a `_.toPairs` or `_.toPairsIn` function.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {Function} keysFunc The function to get the keys of a given object.
|
||||||
|
* @returns {Function} Returns the new pairs function.
|
||||||
|
*/
|
||||||
|
function createToPairs(keysFunc) {
|
||||||
|
return function(object) {
|
||||||
|
var tag = getTag(object);
|
||||||
|
return tag == mapTag ? mapToArray(object) : baseToPairs(object, keysFunc(object));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a function that either curries or invokes `func` with optional
|
* Creates a function that either curries or invokes `func` with optional
|
||||||
* `this` binding and partially applied arguments.
|
* `this` binding and partially applied arguments.
|
||||||
@@ -12893,9 +12905,7 @@
|
|||||||
* _.toPairs(new Foo);
|
* _.toPairs(new Foo);
|
||||||
* // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
|
* // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
function toPairs(object) {
|
var toPairs = createToPairs(keys);
|
||||||
return baseToPairs(object, keys(object));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an array of own and inherited enumerable string keyed-value pairs
|
* Creates an array of own and inherited enumerable string keyed-value pairs
|
||||||
@@ -12920,9 +12930,7 @@
|
|||||||
* _.toPairsIn(new Foo);
|
* _.toPairsIn(new Foo);
|
||||||
* // => [['a', 1], ['b', 2], ['c', 1]] (iteration order is not guaranteed)
|
* // => [['a', 1], ['b', 2], ['c', 1]] (iteration order is not guaranteed)
|
||||||
*/
|
*/
|
||||||
function toPairsIn(object) {
|
var toPairsIn = createToPairs(keysIn);
|
||||||
return baseToPairs(object, keysIn(object));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An alternative to `_.reduce`; this method transforms `object` to a new
|
* An alternative to `_.reduce`; this method transforms `object` to a new
|
||||||
|
|||||||
34
test/test.js
34
test/test.js
@@ -23256,15 +23256,6 @@
|
|||||||
assert.deepEqual(actual, [['a', 1], ['b', 2]]);
|
assert.deepEqual(actual, [['a', 1], ['b', 2]]);
|
||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should work with an object that has a `length` property', function(assert) {
|
|
||||||
assert.expect(1);
|
|
||||||
|
|
||||||
var object = { '0': 'a', '1': 'b', 'length': 2 },
|
|
||||||
actual = lodashStable.sortBy(func(object), 0);
|
|
||||||
|
|
||||||
assert.deepEqual(actual, [['0', 'a'], ['1', 'b'], ['length', 2]]);
|
|
||||||
});
|
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should ' + (isToPairs ? 'not ' : '') + 'include inherited string keyed property values', function(assert) {
|
QUnit.test('`_.' + methodName + '` should ' + (isToPairs ? 'not ' : '') + 'include inherited string keyed property values', function(assert) {
|
||||||
assert.expect(1);
|
assert.expect(1);
|
||||||
|
|
||||||
@@ -23279,7 +23270,30 @@
|
|||||||
assert.deepEqual(actual, expected);
|
assert.deepEqual(actual, expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should work with strings', function(assert) {
|
QUnit.test('`_.' + methodName + '` should convert objects with a `length` property', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
var object = { '0': 'a', '1': 'b', 'length': 2 },
|
||||||
|
actual = lodashStable.sortBy(func(object), 0);
|
||||||
|
|
||||||
|
assert.deepEqual(actual, [['0', 'a'], ['1', 'b'], ['length', 2]]);
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('`_.' + methodName + '` should convert maps', function(assert) {
|
||||||
|
assert.expect(1);
|
||||||
|
|
||||||
|
if (Map) {
|
||||||
|
var map = new Map;
|
||||||
|
map.set('a', 1);
|
||||||
|
map.set('b', 2);
|
||||||
|
assert.deepEqual(func(map), [['a', 1], ['b', 2]]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
skipAssert(assert);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.test('`_.' + methodName + '` should convert strings', function(assert) {
|
||||||
assert.expect(2);
|
assert.expect(2);
|
||||||
|
|
||||||
lodashStable.each(['xo', Object('xo')], function(string) {
|
lodashStable.each(['xo', Object('xo')], function(string) {
|
||||||
|
|||||||
Reference in New Issue
Block a user