• 容易记混的方法slice、splice、split


    在使用slice、splice、split这三货的时候,有时候老是迷糊,今天特意整理一下他们三的区别,省的自己忘记,下面开始总结吧

    • slice:

    存在于数组的prototype上面,可以通过Array.prototype来获取,所以每个数组的实例对象都可以像这样[].slice使用它.

    slice的官方描述: slice() 方法返回一个新的数组对象,这一对象是一个由 start 和 end 决定的原数组的浅拷贝(包括 start,不包括 end),其中 start 和 end 代表了数组元素的索引。原始数组不会被改变。

    start 可选
    提取起始处的索引(从 0 开始),会转换为整数。
    如果索引是负数,则从数组末尾开始计算——如果 start < 0,则使用 start + array.length。
    如果 start < -array.length 或者省略了 start,则使用 0。
    如果 start >= array.length,则不提取任何元素。

    end 可选
    提取终止处的索引(从 0 开始),会转换为整数。slice() 会提取到但不包括 end 的位置。
    如果索引是负数,则从数组末尾开始计算——如果 end < 0,则使用 end + array.length。
    如果 end < -array.length,则使用 0。
    如果 end >= array.length 或者省略了 end,则使用 array.length,提取所有元素直到末尾。
    如果 end 在规范化后小于或等于 start,则不提取任何元素。

    看不明白,看下表,按照索引,去操作,这里注意哈,所有的字符串截取操作都是只能从左往右截,做不到从右往左哈.这个很重要

    正向索引0123
    数组元素abcd
    逆向索引-4-3-2-1

    来看看例子:

    let array = ['a','b','c','d']
    array.slice(0,1)     //  ['a']
    array.slice(-2,-1) // ['c']
    array.slice() // ['a','b','c','d']
    
    • 1
    • 2
    • 3
    • 4

    看看上面的执行,前两条截取没啥,关键是第三条,在slice方法没有参数的情况下,返回和操作数组相同的数组

    • splice

    这个方法同样存在于数组的prototype上面,数组实例也可以直接通过[].splice来使用它

    来看看这个的官方描述

    splice() 方法 就地 移除或者替换已存在的元素和/或添加新的元素。
    看到了没,就地的那个关键词,也就是说它执行后会改变原来的数组哈,这个方法的返回是一个包含了删除的元素的数组。

    他的参数

    start 可选
    从 0 开始计算的索引,表示要开始改变数组的位置,它会被转换成整数。

    负索引从数组末尾开始计算——如果 -buffer.length <= start < 0,使用 start + array.length。
    如果 start < -array.length,使用 0。
    如果 start >= array.length,则不会删除任何元素,但是该方法会表现为添加元素的函数,添加所提供的那些元素。
    如果 start 被省略了(即调用 splice() 时不传递参数),则不会删除任何元素。这与传递 undefined 不同,后者会被转换为 0。

    deleteCount 可选

    **一个整数,**表示数组中要从 start 开始删除的元素数量。

    如果省略了 deleteCount,或者其值大于或等于由 start 指定的位置到数组末尾的元素数量,那么从 start 到数组末尾的所有元素将被删除。但是,如果你想要传递任何 itemN 参数,则应向 deleteCount 传递 Infinity 值,以删除 start 之后的所有元素,因为显式的 undefined 会转换为 0。

    如果 deleteCount 是 0 或者负数,则不会移除任何元素。在这种情况下,你应该至少指定一个新元素(请参见下文)。

    item1、…、itemN 可选
    从 start 开始要加入到数组中的元素。如果不指定任何元素,splice() 将只从数组中删除元素。

    看看操作

    let array = ['a','b','c','d']
    array.splice()  // [] 不传参数啥也不删,返回就是个空数组,这里和slice不同
    array.splice(0,1) // ['a']
    console.log(array) // ['b', 'c', 'd']
    array.splice(1)  // ['c', 'd']
    
    • 1
    • 2
    • 3
    • 4
    • 5

    split

    存在于字符串的prototype上面,可以通过String.prototype来获取,所以每个数组的实例对象都可以像这样“”.slice使用它.

    官方描述: split() 方法接受一个模式,通过搜索模式将字符串分割成一个有序的子串列表,将这些子串放入一个数组,并返回该数组。

    他的参数

    separator可选
    描述每个分割应该发生在哪里的模式。可以是 undefined,一个字符串,或者一个具有 Symbol.split 方法的对象——典型的例子是正则表达式。**省略 separator 或传递 undefined 会导致 split() 返回一个只包含所调用字符串数组。**所有不是 undefined 的值或不具有 @@split 方法的对象都被强制转换为字符串。

    limit 可选
    一个非负整数,指定数组中包含的子字符串的数量限制。当提供此参数时,split 方法会在指定 separator 每次出现时分割该字符串,但在已经有 limit 个元素时停止分割。任何剩余的文本都不会包含在数组中。

    如果在达到极限之前就达到了字符串的末端,那么数组包含的条目可能少于 limit。
    如果 limit 为 0,则返回 []。

    返回值
    在给定字符串中出现 separator 的每一个点上进行分割而成的字符串数组。

    看看运行结果吧

    let string = "my@name$is&lucy"
    string.split(/[\@\$\&]/)   //  ['my', 'name', 'is', 'lucy']
    let string = "my name is lucy"
    string.split(" ")  //  ['my', 'name', 'is', 'lucy']
    string.split(" ", 3) ['my', 'name', 'is']
    
    • 1
    • 2
    • 3
    • 4
    • 5

    刚才搜索split的时候突然发现slice也是String上prototype的方法啊,所以它也可以操作字符串.也是截取,但不改变字符串本身,这个记住一下

  • 相关阅读:
    双十二薅羊毛!这几款数码好物不可错过
    设计模式系列-原型模式
    CTF-栈溢出-基本ROP-【ret2shellcode】
    如何写好git commit log
    又一个Java面试神器!!!
    web课程设计【网页设计】期末大作业html+css(个人网站)
    LINUX安装openssl
    libusb获取Windows设备实例路径DevicePath
    IO系列(十) -TCP 滑动窗口原理解析
    初学算法——第二天:斐波那契数列
  • 原文地址:https://blog.csdn.net/qq_33039355/article/details/138189215