使用示例

arrify可以将任何值转换为数组

  1. import arrify from 'arrify';
  2. arrify('🦄');
  3. //=> ['🦄']
  4. arrify(['🦄']);
  5. //=> ['🦄']
  6. arrify(new Set(['🦄']));
  7. //=> ['🦄']
  8. arrify(null);
  9. //=> []
  10. arrify(undefined);
  11. //=> []

源码

  1. export default function arrify (value) {
  2. // null 和 undefined 直接返回 []
  3. if (value === null || value === undefined) {
  4. return []
  5. }
  6. // 数组原样返回 [1] => [1]
  7. if (Array.isArray(value)) {
  8. return value
  9. }
  10. // 字符类型 '1' => ['1']
  11. if (typeof value === 'string') {
  12. return [value]
  13. }
  14. // iterator new Set([1, 2]) => [1, 2]
  15. if (typeof value[Symbol.iterator] === 'function') {
  16. return [...value]
  17. }
  18. // 1 => [1]
  19. // true => [true]
  20. // {age:1} => [{age:1}]
  21. // function(){} => [ƒ()]
  22. return [value]
  23. }

关于iterator

一些内置类型拥有默认的迭代器行为,其他类型(如 Object)则没有。下表中的内置类型拥有默认的@@iterator方法: