【Javascript修炼篇】一文搞懂Splice 和 Slice区别

它们因不同的目的而生,却在不少场景下长得一副模样。咱们不卖关子,直接开讲,先把这团疑惑的雾拨开。

小贴士 1: 先瞅瞅它们的字面意思

  • Splice:把(绳子的)末端交织起来连接或接合。
  • Slice:(尤指食物)切成片。

得,先谢过谷歌大神提供的释义,感恩的心,感谢有你~ 😃

希望这波解释能让你心里有点谱了。

小贴士 2: 虽说不太直观,但这招能帮你再理清一点。记着,splice 的英文原意暗示它“更长”,体现在用法上,就是它接受的参数比 slice 多。瞅瞅官方定义:

  • arr.splice(start, deleteCount, item1, item2, ..., itemN);
  • arr.slice(start, end);

小贴士 3: 技术性区别来了,splice 会直接改原数组,而 slice 就是个乖乖仔,不动原数组分毫。

想想你要面包片时会咋做,这事儿就简单了。

别费心全记住,挑个对你胃口的点记牢就行。

👉 如果你有别的妙招记住它们,评论区见哦!

现在,来点硬核的。它们到底干啥的?

先说 splice

这是 JavaScript 数组的方法,能删、能换、还能往数组里添新元素。

  • 直接改原数组。
  • 用法:splice(start, deleteCount, item1, item2, ..., itemN);

start 是动手脚的起始位置;deleteCount 是从这位置起要移除的元素数量,可选;item1, item2 那些是想加进数组的新元素。

splice 返回被移除的元素组成的数组,如果没有移除则返回空数组。

let fruits = ['苹果', '香蕉', '芒果', '葡萄', '橙子'];
fruits.splice(5, 1); // 超出长度,啥也不干
> []fruits.splice(1, 1); // 移除香蕉
> ['香蕉']
fruits
> ['苹果', '芒果', '葡萄', '橙子']fruits.splice(1, 0, '香蕉'); // 不删,原地加香蕉
> []
fruits
> ['苹果', '香蕉', '芒果', '葡萄', '橙子']fruits.splice(-1, 1); // 橙子拜拜
> ['橙子']
fruits
> ['苹果', '香蕉', '芒果', '葡萄']fruits.splice(1, 0); // 无增无减,空操作
> []
fruits
> ['苹果', '香蕉', '芒果', '葡萄']fruits.splice(1, 1, '新香蕉'); // 香蕉换新
> ['香蕉']
fruits
> ['苹果', '新香蕉', '芒果', '葡萄']fruits.splice(2); // 从芒果开始全砍
> ['芒果', '葡萄']
fruits
> ['苹果', '新香蕉']fruits.splice(0); // 清空数组
> ['苹果', '新香蕉']
fruits
> []

👉 上面的例子应该挺全面了,如果还有啥新鲜玩法,欢迎留言,我随时乐意更新文章。

轮到 slice 登场:

切片高手,浅拷贝数组一段出来,原封不动保留原数组。

  • 语法:slice(start, end),从 start(含)截取到 end(不含),支持负数表示倒数位置。
let fruits = ['苹果', '香蕉', '芒果', '葡萄', '橙子'];let copiedFruits = fruits.slice(1, 4);
copiedFruits
> ['香蕉', '芒果', '葡萄']let fromThird = fruits.slice(3);
fromThird
> ['葡萄', '橙子']let beyondEnd = fruits.slice(5); // 超出范围,空数组
beyondEnd
> []let fullCopy = fruits.slice();
fullCopy
> ['苹果', '香蕉', '芒果', '葡萄', '橙子']let negLast = fruits.slice(-1);
negLast
> ['橙子']let negRangeEmpty = fruits.slice(-3, 2); // 空区间,空数组
negRangeEmpty
> []let negRangeOne = fruits.slice(-3, -2);
negRangeOne
> ['芒果']let negIndex = fruits.slice(-4);
negIndex
> ['香蕉', '芒果', '葡萄', '橙子']let negBigOffset = fruits.slice(-6);
negBigOffset;
> ['苹果', '香蕉', '芒果', '葡萄', '橙子']

跟数组的 slice 类似,字符串也有个 slice 方法,作用差不多,但人家专攻字符串领域。

好啦,今天的分享就到这里,希望对你有帮助。😊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Owinps静态IP代理:跨境电商的优选解决方案

在快速发展的电子商务领域,尤其是跨境电商行业,网络的稳定性和安全性是成功经营的关键因素之一。在这背后,少不得一个重要的跨境电商工具——代理IP,而这其中,静态IP因其独特的稳定性和安全性,正逐渐成为众…

微信小程序开发(持续更新)

1.项目基本配置 (1)文件 1)主体文件 主体文件:够作用于整个小程序,影响到小程序的每个页面,主体文件必须放到项目的根目录下 由三部分组成: .appjs:小程序入口文件.app.json:小程序的全局配…

linux中使用gdb调试c++的dump文件

1 查看系统是否开启dump生成 0表示没开启 ulimit -c 但是这个只是针对当前这个连接,如果想要永久修改可以修改配置文件:vim /etc/profile,然后添加上面的命令ulimit - c unlimited.然后执行source /etc/profile或者重启使刚刚的配置可以…

数控六面钻选购指南:如何挑选一款高效、精准的加工利器?

在木工家具、门窗制造等行业中,数控六面钻凭借其高效、精准的特点,逐渐成为现代生产线上的必备设备。然而,市场上的数控六面钻品牌众多,性能各异,如何选购一款适合自己的设备呢?本文将为您提供一份实用的选…

【稀疏三维重建】pixelSplat:仅需两张图,重建3D Gaussian Splats

文章目录 一.摘要二、相关工作 , 背景(gs)三、基于图像的三维高斯预测3.1 双视图图像编码器(解决尺度模糊性)3.2 (像素对齐的)高斯参数预测 四、实验效果 论文:《pixelSplat: 3D Gaussian Splats from Image Pairs for…

动态规划之买卖股票大集合

目录 引言 1.只能进行一次买卖股票(最多只能买一股股票) 2.可以进行多次股票买卖,且没有手续费(最多只能买一股股票) 3.可以进行多次股票买卖,但是有冷冻期,无手续费(最多只能买一…

常用压力、流量单位换算表

一、压力为单位面积所承受的力 压力:绝对压力 、表压力 、大气压力。相互关系:绝对压力表压力大气压力 绝对压力:当压力表示与完全真空的差。测量处的实际压力。 表压力:当表示其气体数值与该地域大气压力的差值。 大气压力:由大气重量所…

基于C++11实现的手写线程池

在实际的项目中,使用线程池是非常广泛的,所以最近学习了线程池的开发,在此做一个总结。 源码:https://github.com/Cheeron955/Handwriting-threadpool-based-on-C-17 项目介绍 项目分为两个部分,在初版的时候&#x…

让EXCEL VBA支持鼠标滚轮,vb6 IDE鼠标滚轮插件原理

vb6 IDE鼠标滚轮插件怎么运行的(适用于VBA) 使用 Spy,我发现代码窗口正在获取 WM_MOUSEWHEEL 事件,但没有触发 WM_VSCROLL 消息。因此,我编写了一个简单的消息钩子,当它捕获鼠标滚轮事件时触发滚动事件。 我从 Spy 得知代码窗口的…

SQL数据库多层嵌套 json转sql建表语句,SQL数据库里数组里对象数据怎么创建

1. uniapp sqlite 一个数组包含对象嵌套对象通过主外键方式插入数据库: // 假设有一个对象数组,对象中包含嵌套对象 const objectsArray [{parentObject: {id: 1,name: Parent 1,// 其他父对象属性},childObject: {id: 11,parentId: 1,name: Child 1 o…

截图工具分享(Snipaste、FastStone Capture)

目录 一、背景二、Snipaste 截图工具三、FastStone Capture 截图工具 一、背景 在我们日常的学习、工作中,经常会需要使用到各种各样的截图场景,甚至有部分同学还不知道仅仅通过截图的运用就可以大大提升自己的学习效率和工作效率。在这篇文章中&#xf…

速盾:cdn如何解析?

CDN是内容分发网络(Content Delivery Network)的缩写,它是一种通过在全球范围内分布节点服务器来提供高性能、高可用性的网络服务的技术。CDN的主要功能是通过将内容分发到离用户更近的服务器节点,从而加速用户对网站、应用程序、…

[蓝桥杯 2020 省 AB2] 子串分值

一.题目 题目描述 对于一个字符串 S,我们定义 S 的分值 f(S) 为 S 中恰好出现一次的字符个数。 例如 f(“aba”)1,f(“abc”)3, f(“aaa”) 0。 现在给定一个字符串 S[0…n−1](长度为 n),请你计算对于所有 S 的非…

嵌入式学习——3——域套接字UNIX

1、域套接字UNIX 1、域套接字是最原始的套接字通信方式,是完成同一主机之间多个进程间通信 2、由于不需要跨主机进行通信了,那么就无需使用ip地址和端口号了 3、通信本质:依然使用的是内核空间 4、域套接字的通信介质为套接字文件 bcd-lsp 5、…

低代码技术:数字经济时代的崛起与变革

随着数字经济时代的到来,低代码技术作为一种创新性工具正迅速崛起。本文将介绍低代码技术的定义和特点,并探讨其在数字经济中的重要性和应用。同时,我们将讨论低代码技术对传统软件开发方式的改变以及其带来的商业与创新机会。 引言 随着数字…

如何解决链游中可能出现的延迟或网络拥堵问题?

随着区块链技术的不断发展和普及,链游(基于区块链的游戏)作为新兴的娱乐形式,正逐渐走进大众的视野。然而,与传统游戏相比,链游在运行过程中可能会遇到一些特有的问题,其中最为突出的就是延迟和…

GB-T 37973-2019 信息安全技术 大数据安全管理指南

编写背景 随着大数据技术的快速发展和广泛应用,数据安全问题日益凸显。大数据安全管理指南的编写旨在指导和规范大数据在采集、存储、处理、传输、共享和销毁等环节的安全管理工作,以确保数据的完整性、可用性和 保密性,同时促进大数据的健康…

Oracle中clob怎么拼接字符

在Oracle数据库中,拼接字符主要有以下几种方法,我会以清晰的方式为您解释: 使用“||”操作符 这是Oracle中常用的字符串拼接方法。 语法示例:SELECT Hello || World AS result FROM dual; 输出结果:Hello World …

ES脚本启动报错修改

使用自写脚本启动ES集群时,添加安全策略时报错如下: Positional arguments not allowed, found [ -E xpack.security.enabledtrue -E xpack.security.transport.ssl.enabledtrue -E xpack.license.self_generated.typebasic -E xpack.security.transpor…

宝塔下应该用 Memcached 还是 Redis?

明月最近在跟几个使用宝塔面板的客户运维的时候发现不少站长不知道如何选择 Memcached 和 Redis,甚至都说不清楚 Memcached 或者 Redis 具体是用来干啥的?甚至还碰到过一个站长 Memcached 和 Redis 都安装了,但一个都没有用,就那么…