源码共读第二天 【 arrify转数组 】

72 阅读1分钟

核心源码鉴赏

    
export default function arrify(value) {
	if (value === null || value === undefined) {
		return [];
	}

	if (Array.isArray(value)) {
		return value;
	}

	if (typeof value === 'string') {
		return [value];
	}

	if (typeof value[Symbol.iterator] === 'function') {
		return [...value];
	}

	return [value];
}

注释版

以下是我根据自己的理解添加的注释内容

/**
 * @description 将任何数据类型的数据转为数组
 * @export
 * @param {*} value 入参待转化的内容
 * @returns {*} 返回转化过后的内容
 */
export default function arrify(value) {
	// 若入参为null或undefined,返回空数组;
	if (value === null || value === undefined) {
		return [];
	}

	// 若入参为数组,返回本身;
	if (Array.isArray(value)) {
		return value;
	}

	// 若入参为字符串,返回数组包裹字符串;
	if (typeof value === 'string') {
		return [value];
	}

	// 若入参为其他可迭代对象,如set、map则利用扩展运算符转为数组;
	if (typeof value[Symbol.iterator] === 'function') {
		return [...value];
	}

	// 其余类型均返回数组包裹后的数组
	return [value];
}

收获与总结

本次源码比较简单,主要学习了它的边缘情况处理和测试框架ava的使用,遇到的小坑是项目下载下来后要切换node版本到14以上,package.json里面写的>=12属实迷惑到我了😅。

文章到此结束,感谢阅读~~