手写数组方法(十):slice

112 阅读2分钟

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

今天我们来学习下数组的slice方法。

语法

array.slice(start, end)

参数

  • start: 可选。规定从何处开始选取。如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
  • end: 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

返回值

返回一个新的数组,包含从 start(包括该元素) 到 end (不包括该元素)的 原数组 中的元素。

实测

不传参

image.png

只传start

image.png

参数end

image.png

返回值

image.png

手写

根据以上分析不难写出以下代码:

Array.prototype._slice = function(start, end) {
    if(!start) return [...this];
    let res = [];
    start = start > 0 ? start : this.length + start;
    if(!end) {
        end = this.length;
    }
    end = end > 0 ? end : this.length + end;
    this.forEach((v, i) => {
        if(i >= start && i < end) {
            res.push(v);
        }
    })
    return res;
}

以上是本方法的核心逻辑,还有更多严谨的限制条件这边没有处理,大家可自行研究。

结语

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