3.1 first

3.1.1语法

_.first(array, [n])

3.1.2说明

返回数组的第一个元素,或前n个元素的集合。

3.1.3 代码示例

示例一:返回数组第一个元素

var list = [1, 2, 3, 4];
_.first(list); //=> 1

示例二:传参数n,始终返回数组

var list = [1, 2, 3, 4];

//n传1也返回数组。
_.first(list, 1); //=> [1]

//返回前2个元素
_.first(list, 2); //=> [1, 2]

3.1.4 list也可能是字符串

_.first('abc', 2); //=> ["a", "b"]

3.1.5 特殊的n值

var res;
var list = [1, 2, 3, 4];

// n < 0
_.first(list, -1); //=> []

// n > list.length
_.first(list, 10); //=> [1, 2, 3, 4]

3.1.6 list的特殊情况

_.first(true); //=> undefined
_.first(false); //=> undefined
_.first(NaN); //=> undefined
_.first({}); //=> undefined
_.first(undefined); //=> undefined
_.first(null); //=> undefined

_.first(true, 1); //=> []
_.first(false, 1); //=> []
_.first(NaN, 1); //=> []
_.first({}, 1); //=> []
_.first(undefined, 1); //=> []
_.first(null, 1); //=> []

3.1.7 first的别名

_.head([1, 2, 3]); // Number => 1
_.take([1, 2, 3]); // Number => 1

3.1.8 尝试自己实现功能

function slice(arr, n){
    var res;
    //写下你的代码
    return res;
}
slice([1, 2, 3]); //=> 1
slice([1, 2, 3], 2); //=> [1, 2]
slice([1, 2, 3], -1); //=> []
slice([], 2); //=> [];

3.1.9 first的第三个参数

_.first([1, 2, 3], 1, true); // Number = > 1
_.first([1, 2, 3], 1, false); //=> [1]

3.1.10 源码展示

//三个方法名
_.first = _.head = _.take = function(array, n, guard) {
    //如果==null返回undefined
    if (array == null) return void 0;

    //没有传n或guard为true返回array[0]
    if (n == null || guard) return array[0];

    //调用initial方法
    return _.initial(array, array.length - n);
};