_.drop
文档解析
关联函数
源码解析
// 调用实例
_.drop([1, 2, 3], 2); // => [3]
// 源码解析
function drop(array = [1,2,3], n = 2, guard) {
var length = array == null ? 0 : array.length; // 3
if (!length) {
return [];
}
n = (guard || n === undefined) ? 1 : toInteger(n); // n不传,默认是1
// function toInteger(value = 2) {
// var result = toFinite(value = 2), ==> 2
// remainder = result % 1; // 0
/*
* 处理传值
*/
// function toFinite(value = 2) {
// if (!value) {
// return value === 0 ? value : 0;
// }
// value = toNumber(value); // 转正数字
/*
*这一步是检测传值是不是无穷大或者无穷小
*/
// if (value === INFINITY || value === -INFINITY) { // var INFINITY = 1 / 0 ==> 无穷大
// var sign = (value < 0 ? -1 : 1);
/*
* MAX_INTEGER = 1.7976931348623157e+308,
* 如果vulue是正无穷,就是js的最大值,反之就是最小值
*/
// return sign * MAX_INTEGER;
// }
// return value === value ? value : 0; // 2
// }
// return result === result ? (remainder ? result - remainder : result) : 0; ===> 2
// }
return baseSlice(array = [1,2,3], n < 0 ? 0 : n, length=3);
// function baseSlice(array = [1,2,3], start=2, end=3) {
// var index = -1,
// length = array.length; // 3
// if (start < 0) {
// start = -start > length ? 0 : (length + start);
// }
// end = end > length ? length : end; // 3
// if (end < 0) {
// end += length;
// }
/*
* 核心代码 开始
*/
//
// >>> js的移位符,这里可以理解成取整,保证是整数,计算开始和结束相差几个位置
// length = start > end ? 0 : ((end - start) >>> 0); // ==> 1
// start >>>= 0; // ==> 2 一样的操作保证是正整数
// var result = Array(length); // 创建相同长度数组
// while (++index < length) {
// result[index] = array[index + start]; // 从开始的位置把数据插入,新数组result
// }
// return result;
/*
* 核心代码 结束
*/
// }
}
核心代码逻辑:
- 获取初始值
start,end
- 计算相差的值
length
- 创建目标数组
result
- 循环插入到值之后的数值到新的数组
result
- 抛出
result