arrify转数组

81 阅读1分钟

源码解读

    export default function arrify(value){
	// 展开运算符可以遍历可遍历对象(对象拥有Symbol.iterator属性)得到他的值,于是我们使用展开运算符把可遍历对象转化成数组

	// 先排除null和undefined的情况,返回空数组
	if(value === null || value === undefined){
		return []
	}

	// 如果本身就是数组,就直接返回
	if(Array.isArray(value)){
		return value
	}

	// 字符串也具有Symbol.iterator属性,但是我们不希望把字符串展开转化成一个数组,所以我们需要提前单独处理字符串
	if(typeof value === 'string'){
		return [value]
	}
	// 如果是可遍历对象,将其每一项展开
	if(typeof value[Symbol.iterator] === 'function'){
		return [...value]
	}

	// 其他的数据类型,直接当成数组的第0项返回
	return [value]
}

小插曲

本来感觉自己的文章就要写完了,提交作业之前查看了一下别人的作业,链接,感觉别人才是真的有在认真的思考和学习,差距很大,于是我又巩固了一下Array.from和类数组的知识。

    Array.from()方法对一个类似数组或者可迭代对象创建一个新的,浅拷贝的数组实例。
    Array.from(arrayLike[,mapFn[,thisArg]]
    mapFn 如果指定了改参数,新数组中的每个元素会执行该回调函数。
    类数组对象(拥有一个length属性和若干索引属性的任意对象)

总结

  1. 学习了可迭代对象
  • 为了实现迭代,一个对象必须实现**@@iterator** 方法,
  • Array String Set Map TypedArray 都内置了可迭代方法
  1. 巩固了Array.from的使用方法