源码才十几行的数组转换工具arrify,快学起来

文章介绍了arrify这个JavaScript工具,用于将各种类型的值转换为数组。源码分析了四个条件判断,包括处理null、undefined、字符串和可迭代对象的情况。通过示例展示了arrify的使用,并强调了判断顺序的重要性。同时提到了Symbol.iterator在迭代中的作用。
摘要由CSDN通过智能技术生成

前言

前几天在项目中运用到了arrify工具,今天便阅读了arrify的源码,整个源码部分不过才十几行,而且也不难,所以来分享一下阅读心得。

arrify介绍

arrify是什么,有什么作用,或许有些小伙伴还不清楚。简单点理解它就是一个数组转换工具。官方说明它是将传入的任意值转换为数组。

我们先来安装一下arrify

npm install arrify 

这样我们就可以在项目中正式引入该工具了。

import arrify from 'arrify'; 

源码介绍

下面是源码部分。

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];
} 

源码很简单,就十几行。里面做了四个if判断,前三个判断都很好理解,在第四个判断中,加入了迭代器判断,如果传入参数是可迭代对象, 则使用扩展运算符转换为数组。简单来说就是它解决了很多类型的检验,用 ... 解构出来。

arrify使用

我创建一个空项目,将arrify源码写入,并在后台打印该值,如下所示。

// 源码部分
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];
}
// 打印值
console.log(arrify('abc'));
console.log(arrify('[a,b,c]'));
console.log(arrify(null));
console.log(arrify(undefined));
console.log(arrify(new Set('[a,b,c]')));

function App() {return (<div></div>);
}
export default App; 

通过观察后台,结果如下:

另外,该源码中的判断顺序不可随意改动,如果我们改变if的判断顺序,将迭代器判断移动到前面,结果会不一样。

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

	if (Array.isArray(value)) {
		return value;
	}// 调换顺序if (typeof value[Symbol.iterator] === 'function') {
		return [...value];
	}

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

	return [value];
} 

最终打印结果如下:

Symbol.iterator介绍

Symbol.iterator为每一个对象定义了默认的迭代器。该迭代器可以被for…of… 循环使用。我们可以参考相关文档自定义如下迭代器。

var myIterable = {}
myIterable[Symbol.iterator] = function* () {yield 1;yield 2;yield 3;
};
[...myIterable] 
// 输出[1, 2, 3] 

总结

arrify总结如下:

  • 首先,如果参数是数组, 直接返回原来的参数;如果参数是 string类型, 则返回 [value] ;如果参数是 nullundefined 返回 [];如果参数是可迭代对象,则使用扩展运算符...转换为数组。
  • 其次,源码中通过迭代器判断巧妙地解决了很多类型的判断。
  • 最后,源码中的判断顺序不可随意改动,否则得不到预期效果。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值