发布于 2026-01-06 10 阅读
0

拼接!切片!哎呀,我是说切换!拼接 切片 切换 分裂 莎拉·德拉斯纳来拯救我们了 再见

拼接!切片!哎呀,我是说换挡!

拼接

转移

分裂

莎拉·德拉斯纳来拯救我们了

暂时再见

在 JavaScript 圈里有个玩笑,说数组的函数太多了,而且它们的名字还特别相似。你可能看过这条相关的推文:

或者这个:

或者甚至是这个:

那么,有了这些介绍,让我们来看看它们是什么以及它们之间的区别吧!

拼接

Splice 实际上可以做很多事情。这是因为它最多可以接受三个参数(虽然这么说并不完全准确,但你很快就会明白为什么)。我们先从第一个参数开始。

单参数

第一个参数是索引。如果只传入这一个参数,splice则会删除数组中从指定索引开始(包括索引本身)的所有元素。(在这种情况下,您可以将其理解为数组中剩余的元素数量,从第一个元素开始计算)。

let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(2)
// content is ['post', 'tweet']
// removed is ['video', 'talk']
Enter fullscreen mode Exit fullscreen mode

在这个例子中,只剩下两个元素。从数组中的第一个元素(索引为0)开始,一直到指定的索引2。

两个论点

第二个参数是要删除的元素数量。该计数从第一个参数指定的索引开始。我们来看几个例子。

let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(1, 2)
// content is ['post', 'talk']
// removed is ['tweet', 'video']
Enter fullscreen mode Exit fullscreen mode

你也可以使用负指数。

let content = ['post', 'tweet', 'video', 'talk']
let removed = content.splice(-1, 1)
// content is ['post', 'tweet', 'video']
// removed is ['talk']
Enter fullscreen mode Exit fullscreen mode

三个以上论点

最后几个参数是你要添加的元素。这些元素将从第一个参数指定的索引开始添加。我们先来看一个例子,其中第二个参数是空的0,所以我们不会删除任何元素。

let content = ['post', 'tweet', 'video', 'talk']
content.splice(1, 0, 'dev')
// content is ['post', 'dev', 'tweet', 'video', 'talk']
Enter fullscreen mode Exit fullscreen mode

您也可以一次添加多个元素。

let content = ['post', 'tweet', 'video', 'talk']
content.splice(1, 0, 'dev', 'ten mile')
// content is ['post', 'dev', 'ten mile', 'tweet', 'video', 'talk']
Enter fullscreen mode Exit fullscreen mode

最后,您可以同时添加和删除元素。

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']
Enter fullscreen mode Exit fullscreen mode

如您在这些示例中所见,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']
Enter fullscreen mode Exit fullscreen mode

单参数

第一个参数是索引。复制操作将从给定的索引开始,并包含其之后的所有元素。

let social = ['twitter', 'instagram', 'facebook', 'myspace']
let sliced = social.slice(1)
// social is ['twitter', 'instagram', 'facebook', 'myspace']
// sliced is ['instagram', 'facebook', 'myspace']
Enter fullscreen mode Exit fullscreen mode

请注意,与splice示例不同,原始数组保持不变。

两个论点

第二个参数也是一个索引,但它指定了复制数组的结束位置。

let social = ['twitter', 'instagram', 'facebook', 'myspace']
let sliced = social.slice(1,3)
// social is ['twitter', 'instagram', 'facebook', 'myspace']
// sliced is ['instagram', 'facebook']
Enter fullscreen mode Exit fullscreen mode

再次,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']
Enter fullscreen mode Exit fullscreen mode

它的功能也就仅限于此!

分裂

说实话,这个其实不太相似。不过,它出现在我最初的推文里,所以我在这里简单提一下!

split 函数接受一个字符串,并使用分隔符将其拆分成数组元素。类似这样。

let msg = 'what sentence can I use for this example'
let split = msg.split(' ')
// [
//   'what', 'sentence',
//   'can',  'I',
//   'use',  'for',
//   'this', 'example'
// ]
Enter fullscreen mode Exit fullscreen mode

之所以说它有点相似,是因为如果不传递任何参数,你会得到数组中字符串的副本。

let msg = 'what sentence can I use for this example'
let copy = msg.split()
// [ 'what sentence can I use for this example' ]
Enter fullscreen mode Exit fullscreen mode

这就是它唯一的功能。

莎拉·德拉斯纳来拯救我们了

读完之后,把这些内容忘掉也没关系。想知道为什么吗?因为才华横溢的@sarah_edo开发了一款名为“数组浏览器”(Array Explorer)的超棒工具!下次当你需要操作数组却又想不起要用哪个函数时,不妨试试它。

https://sdras.github.io/array-explorer/

我知道,让你读完这些之后再给你灵丹妙药,这有点残忍。但是学习是好事!

暂时再见

好了,就这些。和往常一样,如果您想看类似的内容,可以看看这些帖子。

文章来源:https://dev.to/laurieontech/splice-slice-shoot-i-meant-shift-424p