笔记: arrify 转数组

73 阅读2分钟

1、前言

2、准备工作

3、开始

3.1源码

export default function arrify(value) {
         // 判断参数是否是null 或者 undefined 通过则返回空数组
	if (value === null || value === undefined) {
		return [];
	}
        // 判断参数是否是数组类型 通过则返回参数自身
	if (Array.isArray(value)) {
		return value;
	}
        // 判断参数是否为字符串类型,之所以这里要单独判断下 是因为字符串也可以使用 for...of api 
	if (typeof value === 'string') {
		return [value];
	}
        // 判断参数是否能遍历 通过则返回用数组包装好的所有可遍历的属性
        (value[Symbol.iterator] 判断参数是否含有iterator属性 该属性存在则可以认定参数为可"遍历"的)
	if (typeof value[Symbol.iterator] === 'function') {
                // 扩展运算符 将一个数组转为用逗号分隔的参数序列
		return [...value];
	}

	return [value];
}

3.2 Iterator(遍历器)的概念

  • JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了MapSet。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是MapMap的成员是对象。这样就需要一种统一的接口机制,来处理所有不同的数据结构。

  • 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。

  • Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费。

4、结语

这个源码只有十几行,逻辑也并不复杂,但是看别人的源码了解他人的思路与逻辑也是一个很大的收获。

参考链接: