获取数组的第一个元素或前面的n个元素数组。
示例
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']
代码
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;
};
解析
- 此模块依赖了另外两个小模块,分别是
is-number
和array-slice
。- 第一个模块,传入一个参数,可用来判断它是否是number类型。
- 第二个模块,传入3个参数,分别是数组、开始下标、结束下标,可用来对数组进行“切割”。
- 此模块本身是一个函数,接收两个参数,数组和需要返回长度的数字。
- 其中数组是必填
- 如果不传会抛出
array-first expects an array as the first argument.
异常,函数执行中断。 - 如果数组长度为0,虽然不会抛出错误,但是也会返回null提前结束。
- 如果不传会抛出
- 数字非必填
- 如果不传或传入的是非数字,默认为1。
- 如果传入数字,默认为它的+1(这是因为
array-slice
模块的结束下标是这个下标之前的一项为最后一项。)
- 其中数组是必填
- 最终依靠
array-slice
模块的“切割”功能完成最终数据的获取。 - 函数的最后通过
if (+num === 1 || num == null)
做了一下返回值的处理,如果只要第一个元素,则直接返回第一个元素的值,而不是数组形式。
欲了解array-slice模块的源码解析,请移步Array-slice。