手写数组方法(十五):fill

199 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

今天带大家学习数组的fill方法

语法

arr.fill(value[, start[, end]])

参数

  • value:用来填充数组元素的值。

  • start:可选。起始索引,默认值为0。如果 start 是个负数,则开始索引会被自动计算成为 length + start

  • end:可选。终止索引,默认值为this.length。如果 end 是个负数,则结束索引会被自动计算成为 length + end

返回值

返回修改后的数组。

例子

一个参数

image.png

只传value参数时,startend的默认值分别为03,等价于list.fill(0, 0, 3),即从下标0开始到下标3截止,用数字0填充替换掉。

两个参数

image.png

以上例子均可先把第三个参数end补齐,然后再做填充替换,很简单就不展开了。需要注意的是当start参数超过了数组长度,不对数组进行操作。

三个参数

image.png

道理同上

参数为负数

image.png

遇到负数的参数,为了便于自己理解,我们需要先转成正数,即上述有说到的length + start或者length + end,当length + start或者length + end的值小于0,我们按0处理。

手写

Array.prototype._fill = function (value, start, end) {
    if(value === undefined) return this;
    start = start ? (start > 0 ? (start < this.length ? start : this.length) : (start + this.length > 0 ? start + this.length : 0)) : 0;
    end = end ? (end > 0 ? (end < this.length ? end : this.length) : (end + this.length > 0 ? end + this.length : 0)) : this.length;
    for (let i = start; i < end; i++) {
        this[i] = value;
    }
    return this;
}

上面代码看着有点复杂,其实就是对startend做一个转化,用以替换数组元素,对照着我们前面说的那些要点,其实还是很容易写出来的。

结语

今天关于数组fill的介绍就讲到这里,关注我获取更多有关数组方法的讲解,后续会持续更新。我是末世未然,一个爱折腾的新晋奶爸,祝好