今天吃 array-first 这个包,这个包主要是用来截取一个数组的头部元素的。git
官方例子:github
var first = require('array-first'); first(['a', 'b', 'c', 'd', 'e', 'f']); //=> 'a' first(['a', 'b', 'c', 'd', 'e', 'f'], 1); //=> 'a' first(['a', 'b', 'c', 'd', 'e', 'f'], 3); //=> ['a', 'b', 'c']
emm,以为小包的目录结构都差很少的,略。数组
var isNumber = require('is-number'); var slice = require('array-slice'); /** * @param {Array<any>} arr 数组 * @param {number} num 截取数量 */ 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; };
代码相信各位都看得懂,而核心代码主要是 slice(arr, 0, isNumber(num) ? +num : 1);
这一句,而这其中用到了一个 array-slice 模块,这个模块跟 Array.splice 的做用同样,惟一区别是不会改变源数组,相似 String.splice。单元测试
单元测试用的 mocha,测试脚本就不贴了,略。测试
这个包比较小,但很符合包的定义:first,只截取头部的元素,美中不足的点是当 num 为1时,返回的是数组的第一个元素,这就致使返回的结果有多是Array,也有多是其余类型。但仔细想一想,或许恰好就有这种使用场景吧~ui