美文网首页
2022-04-14 lodash源码学习 - baseFill

2022-04-14 lodash源码学习 - baseFill

作者: 网恋被骗二块二 | 来源:发表于2022-04-14 23:05 被阅读0次

The base implementation of ‘_.fill’ without an iteratee call guard.
_.fill 的基本实现,没有迭代调用保护。

参数同 fill 的差不多:数组、填充值、起始位置、结束为止

function baseFill(array, value, start, end) {
        // 前情提要,该 baseFill 的调用是由 fill 满足条件之后的调用,所以 array 是满足条件的一个数组
        // 取出长度
        var length = array.length;
        // start 再转化一次整数
        start = toInteger(start);
        // 如果 start 转化后小于 0
        if (start < 0) {
          // 说明起始位置是倒数第几位
          // 当然,如果正数 start 超过了长度,那就从第0位开始,否则就通过计算,求出start的起始位置
          start = -start > length ? 0 : (length + start);
        }
        // 判断end参数存在吗?
        // 如果end参数没有传递,则为undefined,判断条件为 true,end取数组的长度
        // 如果end参数有传递,则判断end是否超过了数组长度?
        // 如果end参数超出了数组长度,则end取数组的长度,否则,将end转化为整数
        end = (end === undefined || end > length) ? length : toInteger(end);
        // 如果end小于0
        if (end < 0) {
          // 则表示是填充到从数组的倒数第几位,通过计算,得出正确的下标
          end += length;
        }
        // 最后判断起始位置和结束位置的下标,若起始位置超出了结束位置
        // end 取 0,
        // 否则toLength 将 `value` 转换为适合用作类数组对象长度的整数。如 3.2 => 3,infinity => 4294967295
        end = start > end ? 0 : toLength(end);
        // 根据起始位置和结算位置开始循环
        while (start < end) {
          // 若起始位置超出结束位置,那么循环一开始就不成立,最后只会返回原数组
          // 若起始位置和结束位置的参数合理,那么每次循环,将会改变数组中对应索引的值,最后返回修改后的数组
          array[start++] = value;
        }
        return array;
      }

相关文章

网友评论

      本文标题:2022-04-14 lodash源码学习 - baseFill

      本文链接:https://www.haomeiwen.com/subject/jpwxertx.html