返回
lodash源码分析之自减的两种形式
前端
2023-10-07 18:30:48
本文将分析lodash中的assocIndexOf函数,这是一个二维数组,每项中的第一项作为缓存对象的key,第二项为缓存的值。assocIndexOf的作用是找出指定的key在数组中的索引值。这段代码很精简,让length自减,调用eq函数,从二维数组的最后一项开始比较,向数组头部遍历,找到指定的key就返回索引值。
assocIndexOf 函数
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq(array[length][0], key)) {
return length;
}
}
return -1;
}
下面我们来一步步分析代码:
- 声明变量 length
var length = array.length;
length变量存储了数组array的长度,这个变量将在循环中被递减,直到为0。
- while循环
while (length--) {
这个循环会一直执行,直到length变量变为0。每执行一次循环,length都会减1。
- if语句
if (eq(array[length][0], key)) {
if语句检查array[length][0]是否等于key。如果相等,则说明找到了指定的key,此时函数会返回length。
- eq函数
eq(array[length][0], key)
eq函数是一个比较函数,它比较两个值是否相等。在lodash中,eq函数可以比较基本类型和对象。
自减的两种形式
在 assocIndexOf 函数中,length 是通过自减的方式来递减的。自减有两种形式:
- 前缀自减
--length;
前缀自减会先减1,然后再使用length的值。
- 后缀自减
length--;
后缀自减会先使用length的值,然后再减1。
在 assocIndexOf 函数中,使用的是后缀自减。这两种自减方式都可以达到相同的效果,但后缀自减更常用。
时间复杂度
assocIndexOf 函数的时间复杂度为O(n),其中n是数组array的长度。这是因为函数需要遍历整个数组来查找指定的key。
总结
assocIndexOf 函数是一个简单的函数,它可以找出指定的key在数组中的索引值。函数使用自减来遍历数组,并使用eq函数来比较两个值是否相等。函数的时间复杂度为O(n)。
扩展阅读