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

本文详细解释了JavaScript中的slice、splice和split这三个数组和字符串处理方法的区别,包括它们的作用、参数说明以及示例应用,强调了slice不会改变原数组,而splice会就地修改数组。
摘要由CSDN通过智能技术生成

在使用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']

看看上面的执行,前两条截取没啥,关键是第三条,在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']

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']

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

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值