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长度的数组。
这个就没必要解析了吧
@alwayslyp 单纯是学习这些模块,并记录一下自己的理解。如果理解有误,请大神指点一二。
@sunfeng90 我没别的意思,我刚看了一下npm也没多少人用,而且还有2个依赖
我有个建议,源码解析可以精简一下,作为注释放在相关代码中,可以单独把作者的思路或者独特处理方式拿出来分析一下。 另外,你的例子比原作者测试用例都多,完全可以自己写个测试用例,覆盖所有可能情况,我之前学习就是这么干的,到时候如果作者有更新,运行一下自己的测试用例,保证这个module始终可用。
这模块有必要吗。。。。。
@alwayslyp 好的。谢谢你宝贵建议。
@alwayslyp 接下来我准备把这些模块都写上单元测试,然后申请一下PR