获取数组的第一个元素或前面的n个元素数组。

示例

  1. var first = require('array-first');
  2. first(['a', 'b', 'c', 'd', 'e', 'f']);
  3. //=> 'a'
  4. first(['a', 'b', 'c', 'd', 'e', 'f'], 1);
  5. //=> 'a'
  6. first(['a', 'b', 'c', 'd', 'e', 'f'], 3);
  7. //=> ['a', 'b', 'c']

代码

  1. var isNumber = require('is-number');
  2. var slice = require('array-slice');
  3. module.exports = function arrayFirst(arr, num) {
  4. if (!Array.isArray(arr)) {
  5. throw new Error('array-first expects an array as the first argument.');
  6. }
  7. if (arr.length === 0) {
  8. return null;
  9. }
  10. var first = slice(arr, 0, isNumber(num) ? +num : 1);
  11. if (+num === 1 || num == null) {
  12. return first[0];
  13. }
  14. return first;
  15. };

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

解析

  • 此模块依赖了另外两个小模块,分别是 is-numberarray-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