arrify
本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
这是源码共读的第1期,链接: juejin.cn/post/710021… 。
本期任务目标:
-
github仓库地址 arrify
-
学习VSCode本地开发调试
-
单元测试、测试用例
-
学习 Symbol.iterator 的使用场景
关键代码
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];
}
// 转换为迭代器map方法
if (typeof value[Symbol.iterator] === 'function') {
return [...value];
}
return [value];
}
测试用例
deepEqual: 断言是否相等
is: 是否为同一对象
test('main', t => {
t.deepEqual(arrify('foo'), ['foo']);
t.deepEqual(arrify(new Map([[1, 2], ['a', 'b']])), [[1, 2], ['a', 'b']]);
t.deepEqual(arrify(new Set([1, 2])), [1, 2]);
t.deepEqual(arrify(null), []);
t.deepEqual(arrify(undefined), []);
const fooArray = ['foo'];
t.is(arrify(fooArray), fooArray);
});
此文章为11月Day1源码共读,以梦为马,11月进步💪💪