npm模块学习之array-first
发布于 8 个月前 作者 sunfeng90 841 次浏览 来自 分享

1、git地址

https://github.com/jonschlinkert/array-first

2、作用

获取数组第一个或者前几个元素

3、例子和源码解析

3.1 例子

const first = require('array-first');

console.log(first(['a', 'b', 'c', 'd', 'e', 'f'])) // 输出:a

console.log(first(['d', 'e', 'f'], 1)) // 输出:d

console.log(first(['d', 'e', 'f'], 2)) // 输出:['d', 'e']

console.log(first([], 2)) // 输出:null

console.log(first('', 2)) // 输出:暴露异常Error: array-first expects an array as the first argument.

console.log(first([1, 2, 3], '3')) // 输出:[1, 2, 3]

console.log(first([1, 2, 3], '')) // 输出:[1]

console.log(first([1, 2, 3], null)) // 输出:1

console.log(first([1, 2, 3], undefined)) // 输出:1

3.2 源码

var isNumber = require('is-number');
var slice = require('array-slice');

module.exports = function arrayFirst(arr, num) {
  if (!Array.isArray(arr)) {
    throw new Error('array-first expects an array as the first argument.');
  }

  if (arr.length === 0) {
    return null;
  }

  var first = slice(arr, 0, isNumber(num) ? +num : 1);
  if (+num === 1 || num == null) {
    return first[0];
  }
  return first;
};

3.3 源码解析

1)暴露出去的函数有两个参数,分别是数组和获取元素的个数;

2)如果传入的不是数组,那么就会暴露类型错误的异常;

3)如果传入的是空数组,那么就会返回null;

4)接着通过slice函数截取第一个元素。如果未传入num或者num不是数字类型,那么默认截取1个元素;如果num是大于1的数字类型,那么就截取长度为num的数组。

5)如果num是1或者null类型,那么就截取数组第一个元素,返回的是一个元素。否则返回num长度的数组。

7 回复

这个就没必要解析了吧

@alwayslyp 单纯是学习这些模块,并记录一下自己的理解。如果理解有误,请大神指点一二。

@sunfeng90 我没别的意思,我刚看了一下npm也没多少人用,而且还有2个依赖

我有个建议,源码解析可以精简一下,作为注释放在相关代码中,可以单独把作者的思路或者独特处理方式拿出来分析一下。 另外,你的例子比原作者测试用例都多,完全可以自己写个测试用例,覆盖所有可能情况,我之前学习就是这么干的,到时候如果作者有更新,运行一下自己的测试用例,保证这个module始终可用。

这模块有必要吗。。。。。

@alwayslyp 好的。谢谢你宝贵建议。

@alwayslyp 接下来我准备把这些模块都写上单元测试,然后申请一下PR

回到顶部