Consolidate toPairs modules.

This commit is contained in:
John-David Dalton
2017-01-11 10:22:56 -08:00
parent aa60e55db4
commit fe5c7a7f3b
4 changed files with 28 additions and 50 deletions

View File

@@ -1,16 +0,0 @@
import arrayMap from './arrayMap.js';
/**
* The base implementation of `toPairs` and `toPairsIn` which creates an array
* of key-value pairs for `object` corresponding to the property names of `props`.
*
* @private
* @param {Object} object The object to query.
* @param {Array} props The property names to get values for.
* @returns {Object} Returns the key-value pairs.
*/
function baseToPairs(object, props) {
return arrayMap(props, key => [key, object[key]]);
}
export default baseToPairs;

View File

@@ -1,30 +0,0 @@
import baseToPairs from './.internal/baseToPairs.js';
import getTag from './.internal/getTag.js';
import mapToArray from './.internal/mapToArray.js';
import setToPairs from './.internal/setToPairs.js';
/** `Object#toString` result references. */
const mapTag = '[object Map]';
const setTag = '[object Set]';
/**
* 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 object => {
const tag = getTag(object);
if (tag == mapTag) {
return mapToArray(object);
}
if (tag == setTag) {
return setToPairs(object);
}
return baseToPairs(object, keysFunc(object));
};
}
export default createToPairs;

View File

@@ -1,4 +1,7 @@
import createToPairs from './.internal/createToPairs.js';
import arrayMap from './.internal/arrayMap.js';
import getTag from './.internal/getTag.js';
import mapToArray from './.internal/mapToArray.js';
import setToPairs from './.internal/setToPairs.js';
import keys from './keys.js';
/**
@@ -23,6 +26,15 @@ import keys from './keys.js';
* toPairs(new Foo);
* // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
*/
const toPairs = createToPairs(keys);
function toPairs(object) {
const tag = getTag(object);
if (tag == '[object Map]') {
return mapToArray(object);
}
if (tag == '[object Set]') {
return setToPairs(object);
}
return arrayMap(keys(object), key => [key, object[key]]);
}
export default toPairs;

View File

@@ -1,4 +1,7 @@
import createToPairs from './.internal/createToPairs.js';
import arrayMap from './.internal/arrayMap.js';
import getTag from './.internal/getTag.js';
import mapToArray from './.internal/mapToArray.js';
import setToPairs from './.internal/setToPairs.js';
import keysIn from './keysIn.js';
/**
@@ -23,6 +26,15 @@ import keysIn from './keysIn.js';
* toPairsIn(new Foo);
* // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
*/
const toPairsIn = createToPairs(keysIn);
function toPairsIn(object) {
const tag = getTag(object);
if (tag == '[object Map]') {
return mapToArray(object);
}
if (tag == '[object Set]') {
return setToPairs(object);
}
return arrayMap(keysIn(object), key => [key, object[key]]);
}
export default toPairsIn;