UNPKG

1.44 kBJavaScriptView Raw
1import Symbol from './_Symbol';
2import copyArray from './_copyArray';
3import getTag from './_getTag';
4import isArrayLike from './isArrayLike';
5import isString from './isString';
6import iteratorToArray from './_iteratorToArray';
7import mapToArray from './_mapToArray';
8import setToArray from './_setToArray';
9import stringToArray from './_stringToArray';
10import values from './values';
11
12/** `Object#toString` result references. */
13var mapTag = '[object Map]',
14 setTag = '[object Set]';
15
16/** Built-in value references. */
17var iteratorSymbol = typeof (iteratorSymbol = Symbol && Symbol.iterator) == 'symbol' ? iteratorSymbol : undefined;
18
19/**
20 * Converts `value` to an array.
21 *
22 * @static
23 * @since 0.1.0
24 * @memberOf _
25 * @category Lang
26 * @param {*} value The value to convert.
27 * @returns {Array} Returns the converted array.
28 * @example
29 *
30 * _.toArray({ 'a': 1, 'b': 2 });
31 * // => [1, 2]
32 *
33 * _.toArray('abc');
34 * // => ['a', 'b', 'c']
35 *
36 * _.toArray(1);
37 * // => []
38 *
39 * _.toArray(null);
40 * // => []
41 */
42function toArray(value) {
43 if (!value) {
44 return [];
45 }
46 if (isArrayLike(value)) {
47 return isString(value) ? stringToArray(value) : copyArray(value);
48 }
49 if (iteratorSymbol && value[iteratorSymbol]) {
50 return iteratorToArray(value[iteratorSymbol]());
51 }
52 var tag = getTag(value),
53 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
54
55 return func(value);
56}
57
58export default toArray;