源码共读01:arrify

102 阅读1分钟

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月进步💪💪