如何利用splice()和slice()方法操作数组

简介: 如何利用splice()和slice()方法操作数组

如何利用splice()和slice()方法操作数组

前言

splice()和slice()都是JavaScript中操作数组的方法,到底怎么用?什么时候用?有什么区别?今天把这个问题搞清楚

splice()是什么,有什么用?怎么用?

splice()用于在数组中进行添加、删除和替换操作,它可以实现以下功能:

功能1:删除数组中的元素

功能2:向数组中添加新元素

功能3:用新元素替换数组中的元素

splice方法的基本语法如下:

array.splice(start, deleteCount, item1, item2, ...)

参数说明:

start:要删除或插入元素的数组下标。

deleteCount:要删除的元素个数,如果该值为0,则不删除任何元素。

item1, item2, …:要插入到数组中的新元素,可以有多个。

  var arr = ["孙悟空", "猪八戒", "唐僧", "沙和尚"];
  //删除元素,从下标2开始删除2个元素
  arr.splice(2, 2);
  console.log(arr); //["孙悟空", "猪八戒"]
  //添加元素,从下标1开始添加2个元素
  arr.splice(1, 0, "张麻子", "县长");
  console.log(arr); //["孙悟空", "张麻子", "县长", "猪八戒"]
  //替换元素,从下标2开始替换1个元素
  arr.splice(2, 1, "独孤求败");
  console.log(arr); //["孙悟空", "张麻子", "独孤求败", "猪八戒"]

★★★关键点:splice方法会直接修改原数组,如果不想修改原数组,可以先将原数组复制一份再进行操作。


slice()是什么,有什么用?怎么用?

slice()用于从数组中获取指定区间的元素,它可以实现以下功能:
功能1:获取指定区间的元素,不会修改原数组

功能2:拷贝数组的一部分,生成一个新的数组

slice方法的基本语法如下:

array.slice(start, end)

参数说明:

start:要拷贝的起始下标,包括该下标的元素。

end:要拷贝的结束下标,不包括该下标的元素。如果省略该参数,则拷贝从start开始到数组末尾的所有元素。

  var arr = ["孙悟空", "猪八戒", "唐僧", "沙和尚"];
  //获取指定区间的元素,不会修改原数组
  var newArr1 = arr.slice(1, 3);
  console.log(newArr1); //["猪八戒", "唐僧"]
  //拷贝数组的一部分,生成一个新的数组
  var newArr2 = arr.slice();
  console.log(newArr2); //["孙悟空", "猪八戒", "唐僧", "沙和尚"]

★★★关键点:slice方法不会修改原数组,而是返回一个新的数组,因此可以通过slice方法来复制一个数组。另外,如果拷贝的起始下标或结束下标为负数,则表示从数组末尾开始计算的位置。


splice和slice方法的区别

splice和slice是JavaScript中的两个数组方法,它们的用法有以下区别:


1.splice方法可以修改原数组,而slice方法不会修改原数组,而是返回一个新的数组。

2.splice方法可以用于删除、添加和替换元素,而slice方法仅用于获取指定区间的元素。

  var arr = ["孙悟空", "猪八戒", "唐僧", "沙和尚"];
  //使用splice方法删除数组中的元素,修改原数组
  arr.splice(1, 2);
  console.log(arr); //["孙悟空", "沙和尚"]
  //使用slice方法获取指定区间的元素,不修改原数组
  var newArr = arr.slice(1, 2);
  console.log(newArr); //["沙和尚"]
  console.log(arr); //["孙悟空", "沙和尚"]

我们首先使用splice方法删除了数组中的元素,即从下标1开始删除2个元素,这样修改了原数组。然后我们使用slice方法获取了指定区间的元素,即从下标1开始到下标2之前的元素,这样并没有修改原数组,而是返回了一个新的数组。


小结

在了解了splice和slice的用法时,我们知道一般地:

当我们需要修改原数组时,可以使用splice方法;

当我们需要获取指定区间的元素时,可以使用slice方法。


相关文章
|
Go
Go 语言为什么建议 append 追加新元素使用原切片变量接收返回值?
Go 语言为什么建议 append 追加新元素使用原切片变量接收返回值?
47 0
如何利用splice()和slice()方法操作数组
如何利用splice()和slice()方法操作数组
71 0
|
前端开发
前端学习案例3-数组上的方法总结3slice
前端学习案例3-数组上的方法总结3slice
62 0
前端学习案例3-数组上的方法总结3slice
|
存储 Java 索引
21.从入门到精通:Python数据结构 列表 将列表当做堆栈使用 将列表当作队列使用 列表推导式 嵌套列表解析 del 语句
21.从入门到精通:Python数据结构 列表 将列表当做堆栈使用 将列表当作队列使用 列表推导式 嵌套列表解析 del 语句
|
Web App开发 JavaScript 前端开发
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
142 0
indexof() includes() 判断数组中是否含有谋元素
indexof() includes() 判断数组中是否含有谋元素
indexof() includes() 判断数组中是否含有谋元素
|
存储 编译器 C语言
【C++要笑着学】list 核心框架接口的模拟实现 | 运算符重载实现list迭代器 | 妙用模板实现const迭代器(一)
我们在上一章说过,list 其实就是带哨兵位循环双向链表而已,这种链表虽然结构复杂,但是实现起来反而是最简单的,我们在数据结构专栏中有过详细的讲解。
235 0
【C++要笑着学】list 核心框架接口的模拟实现 | 运算符重载实现list迭代器 | 妙用模板实现const迭代器(一)
【C++要笑着学】list 核心框架接口的模拟实现 | 运算符重载实现list迭代器 | 妙用模板实现const迭代器(二)
我们在上一章说过,list 其实就是带哨兵位循环双向链表而已,这种链表虽然结构复杂,但是实现起来反而是最简单的,我们在数据结构专栏中有过详细的讲解。
77 0
【C++要笑着学】list 核心框架接口的模拟实现 | 运算符重载实现list迭代器 | 妙用模板实现const迭代器(二)
Collection.stream()forEach()和Collection.forEach()有什么区别?
Collection.stream()forEach()和Collection.forEach()有什么区别?
103 0