拼接!切片!哎呀,我是说换挡!
拼接
片
转移
分裂
莎拉·德拉斯纳来拯救我们了
暂时再见
在 JavaScript 圈里有个玩笑,说数组的函数太多了,而且它们的名字还特别相似。你可能看过这条相关的推文:
或者这个:
或者甚至是这个:
那么,有了这些介绍,让我们来看看它们是什么以及它们之间的区别吧!
拼接
Splice 实际上可以做很多事情。这是因为它最多可以接受三个参数(虽然这么说并不完全准确,但你很快就会明白为什么)。我们先从第一个参数开始。
单参数
第一个参数是索引。如果只传入这一个参数,splice则会删除数组中从指定索引开始(包括索引本身)的所有元素。(在这种情况下,您可以将其理解为数组中剩余的元素数量,从第一个元素开始计算)。
let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(2)
// content is ['post', 'tweet']
// removed is ['video', 'talk']
在这个例子中,只剩下两个元素。从数组中的第一个元素(索引为0)开始,一直到指定的索引2。
两个论点
第二个参数是要删除的元素数量。该计数从第一个参数指定的索引开始。我们来看几个例子。
let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(1, 2)
// content is ['post', 'talk']
// removed is ['tweet', 'video']
你也可以使用负指数。
let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(-1, 1)
// content is ['post', 'tweet', 'video']
// removed is ['talk']
三个以上论点
最后几个参数是你要添加的元素。这些元素将从第一个参数指定的索引开始添加。我们先来看一个例子,其中第二个参数是空的0,所以我们不会删除任何元素。
let content = ['post', 'tweet', 'video', 'talk']
content.splice(1, 0, 'dev')
// content is ['post', 'dev', 'tweet', 'video', 'talk']
您也可以一次添加多个元素。
let content = ['post', 'tweet', 'video', 'talk']
content.splice(1, 0, 'dev', 'ten mile')
// content is ['post', 'dev', 'ten mile', 'tweet', 'video', 'talk']
最后,您可以同时添加和删除元素。
let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(1, 2, 'dev', 'ten mile')
// content is ['post', 'dev', 'ten mile', 'talk']
// removed is ['tweet', 'video']
如您在这些示例中所见,splice()它会修改数组本身。
片
Slice 函数会对数组进行浅拷贝。如果您需要复习一下浅拷贝的概念,请查看这篇文章。
此副本是原始副本的子集。与 splice 函数一样,slice 函数接受多个参数,在本例中为两个,但并非所有参数都是必需的。
没有争论
如果使用时slice不带任何参数,它将像对整个数组进行浅拷贝一样运行。
let social = ['twitter', 'instagram', 'facebook', 'myspace']
let sliced = social.slice()
// social is ['twitter', 'instagram', 'facebook', 'myspace']
// sliced is ['twitter', 'instagram', 'facebook', 'myspace']
单参数
第一个参数是索引。复制操作将从给定的索引开始,并包含其之后的所有元素。
let social = ['twitter', 'instagram', 'facebook', 'myspace']
let sliced = social.slice(1)
// social is ['twitter', 'instagram', 'facebook', 'myspace']
// sliced is ['instagram', 'facebook', 'myspace']
请注意,与splice示例不同,原始数组保持不变。
两个论点
第二个参数也是一个索引,但它指定了复制数组的结束位置。
let social = ['twitter', 'instagram', 'facebook', 'myspace']
let sliced = social.slice(1,3)
// social is ['twitter', 'instagram', 'facebook', 'myspace']
// sliced is ['instagram', 'facebook']
再次,social结果不变。使用时总是如此slice。
转移
Shift 函数不接受任何参数。它的作用是移除给定数组的第一个元素。但是,与 slice 函数不同(尽管与 splice 函数类似),Shift 函数会直接操作数组。
let antisocial = ['tv shows', 'movies', 'puzzles', 'board games']
let firstElement = antisocial.shift()
// antisocial is ['movies', 'puzzles', 'board games']
// firstElement is ['tv shows']
它的功能也就仅限于此!
分裂
说实话,这个其实不太相似。不过,它出现在我最初的推文里,所以我在这里简单提一下!
split 函数接受一个字符串,并使用分隔符将其拆分成数组元素。类似这样。
let msg = 'what sentence can I use for this example'
let split = msg.split(' ')
// [
// 'what', 'sentence',
// 'can', 'I',
// 'use', 'for',
// 'this', 'example'
// ]
之所以说它有点相似,是因为如果不传递任何参数,你会得到数组中字符串的副本。
let msg = 'what sentence can I use for this example'
let copy = msg.split()
// [ 'what sentence can I use for this example' ]
这就是它唯一的功能。
莎拉·德拉斯纳来拯救我们了
读完之后,把这些内容忘掉也没关系。想知道为什么吗?因为才华横溢的@sarah_edo开发了一款名为“数组浏览器”(Array Explorer)的超棒工具!下次当你需要操作数组却又想不起要用哪个函数时,不妨试试它。
https://sdras.github.io/array-explorer/
我知道,让你读完这些之后再给你灵丹妙药,这有点残忍。但是学习是好事!
暂时再见
好了,就这些。和往常一样,如果您想看类似的内容,可以看看这些帖子。
文章来源:https://dev.to/laurieontech/splice-slice-shoot-i-meant-shift-424p