You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.4 KiB
58 lines
1.4 KiB
var Symbol = require('./_Symbol'), |
|
copyArray = require('./_copyArray'), |
|
getTag = require('./_getTag'), |
|
isArrayLike = require('./isArrayLike'), |
|
isString = require('./isString'), |
|
iteratorToArray = require('./_iteratorToArray'), |
|
mapToArray = require('./_mapToArray'), |
|
setToArray = require('./_setToArray'), |
|
stringToArray = require('./_stringToArray'), |
|
values = require('./values'); |
|
|
|
/** `Object#toString` result references. */ |
|
var mapTag = '[object Map]', |
|
setTag = '[object Set]'; |
|
|
|
/** Built-in value references. */ |
|
var symIterator = Symbol ? Symbol.iterator : undefined; |
|
|
|
/** |
|
* Converts `value` to an array. |
|
* |
|
* @static |
|
* @since 0.1.0 |
|
* @memberOf _ |
|
* @category Lang |
|
* @param {*} value The value to convert. |
|
* @returns {Array} Returns the converted array. |
|
* @example |
|
* |
|
* _.toArray({ 'a': 1, 'b': 2 }); |
|
* // => [1, 2] |
|
* |
|
* _.toArray('abc'); |
|
* // => ['a', 'b', 'c'] |
|
* |
|
* _.toArray(1); |
|
* // => [] |
|
* |
|
* _.toArray(null); |
|
* // => [] |
|
*/ |
|
function toArray(value) { |
|
if (!value) { |
|
return []; |
|
} |
|
if (isArrayLike(value)) { |
|
return isString(value) ? stringToArray(value) : copyArray(value); |
|
} |
|
if (symIterator && value[symIterator]) { |
|
return iteratorToArray(value[symIterator]()); |
|
} |
|
var tag = getTag(value), |
|
func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); |
|
|
|
return func(value); |
|
} |
|
|
|
module.exports = toArray;
|
|
|