slice_slice什么意思
最近有些日子没和大家见面了,今天我想和大家聊一聊“slice”的话题。如果你对这个话题还比较陌生,那么这篇文章就是为你而写的,让我们一起来了解一下吧。
1.slice
2.关于 slice、splice 记忆和区分
3.Slice 扩容机制解惑
4.slice形容词
slice
不知道大家对 slice, splice, splite 是肿么样的感觉,反正我刚接触到这三个函数的时候整个人都懵了,因为一个个长的跟孪生兄弟似的,每次用的时候都会混,甚至懒得记住他们的功能。所以为了帮组和我一样有困扰的人,我们来解决它。三个方法除了长得像,其实功能完全不一样,为了帮助记忆,先总结一下:
1. slice 是 Array 和 String 都有的方法,功能也和字符串的 slice 是一样,截取区间值用的。String的slice()方法请看上篇文章: js里相似的方法比较系列(一)String的slice,substring,substr方法区别 。
2. splice 仅是数组 Array 的方法,splice比slice外观上多个p,这一个p蹦出了天差地别,功能超级强大。它能用来插入、删除甚至替换数组的元素。
3. split 仅仅是字符串的方法,外观上也有p,但是少了ce,还多了个t。这个t厉害了,一脚把字符串踢成了多段,吓得字符串变成了数组。没错, split() 方法就是用来把一个字符串分割成字符串数组。
下面我就来分别说说他们:
用法:array.slice(start, end)
解释: slice() 该方法用于对数组进行部分截取,并返回一个数组副本;参数 start 是截取的开始数组索引, end 参数等于你要截取的最后一个元素的索引位置加上1的值(可选)
用法:array.splice(start, deleteCount, item,…..,itemX)
解释: splice() 方法用于插入、删除或替换数组的元素。 splice 方法从 array 中移除一个或多个元素,如果你愿意的话可以用新的item替换它们。参数start是从数组array中移除元素的开始位置。参数 deleteCount 是要移除的元素的个数。
如果有额外的参数,那么 item,…..,itemX 会插入到被移除元素的位置上。
splice()方法返回一个包含被移除元素的数组。
用法:string.split(separator, limit)
解释: split() 方法用于把一个字符串分割成字符串数组。把这个 string 分割成片段来创建一个新的字符串数组,但不改变原始字符串。
separator 参数可以是一个分隔符,它可以是字符串或一个正则表达式。如果 separator 是一个空字符(‘’),会返回一个单字符的数组。
limit (可选参数)可以限制被分割的片段数量。
今天就到这吧,下一节我们讲解 “js相似方法比较系列(三)charAt,indexof,findIndex,lastindexof,includes,find的区别” ,敬请期待~!
参考地址:
blogs.com/webjoker/p/5218114.html
/yw00yw/article/details/81063038
关于 slice、splice 记忆和区分
flake作为动词时意为to fall off in flakes即成薄片状剥落;slice作为动词时意为to cut into slices即把....切成薄片,同时还有用刀切的意思。
flake作为名词时意为a small,thin piece of something即小薄片,如soap flakes肥皂片、snowflakes雪花;slice作为名词时意为a thin flat piece cut from something即(切下的)薄片,片,如a slice of bread。
够清楚了吧?
Slice 扩容机制解惑
你是不是也很烦,记不住 slice() 和 splice() 的用法,隔一段时间,再用时就得翻文档。比如说:本文将会介绍这些内容,如果没时间或直接看结论的,请滑动鼠标至文末。
语法如下:
begin 和 end 都是可选的。返回一个新的数组,是由 begin 和 end 决定的原数组的浅拷贝(包括 begin ,不包括 end )。通俗地讲,就是截取原数组的一部分,并返回截取部分,且“不改变”原数组 。
总结一下:
请看示例:
字符串也有一个类似的方法: String.prototype.slice() ,它用来提取字符串的某一部分,并返回一个新的字符串,且不会改变原字符串。语法如下:
应用场景:
讲真的,它跟 slice() 长得像不说,还容易混淆,隔一段时间不用,都得翻一下文档确认一下。
语法如下:
所有参数都是可选的。从 MDN 上的表述看,参数 start 应该不能缺省的,但实际并不会报错,因此可认为是全可选的。 splice() 返回被删除的元素所组成的一个新数组,若没有删除,则返回空数组( [] )
简单总结一下:
请看示例:
顺道提一下,其实 split() 这个就很简单了,常用于字符串转为数组、解析 URL 参数等场景。
在字符串与数字切换,常用到 String.prototype.split() 、 Array.prototype.join() 、 Array.prototype.reverse() 方法。
语法如下:
参数 separator 和 limit 都是可选的。若缺省 separator 时,返回的数组包含一个由整个字符串组成的元素。而 limit 的作用是返回分割片段的数量。
separator 可以是字符串,也可以为正则表达式,它适合提取一些不太规则的字符串。
假设有以下两个字符串,我们要把月份提取出来,并返回数组:
本文,主要是讲解 slice() 和 splice() 方法及其区别。好吧,面试官也喜欢问这俩货。
slice形容词
大家都知道slice扩容机制, 在切片长度小于1024时会扩容为原来的2倍,超过1024扩容为原来的1.25倍 。其实这仅仅是slice扩容第一步的其中一个条件,还存在第二条件( if cap > doublecap ),并且还有第二步: 内存对齐 ,看源码你就知道了:
看两个例子吧:
若按最开始的结论,你可能会这么想:
原 slice 容量小于 1024,扩容时容量每次增加 1 倍。添加元素 4 的时候,容量变为4;添加元素 5 的时候不变;添加元素 6 的时候容量增加 1 倍,变成 8。所以你的结论是: len=5, cap=8
恭喜你,你的结论是对的!
和上面一样,你可能会这么想:
原 slice 容量小于 1024,扩容时容量每次增加 1 倍。添加元素 4 的时候,容量变为4;添加元素 5 的时候不变;添加元素 6 的时候容量增加 1 倍,变成 8。所以你的结论依然是: len=5, cap=8
这是错误的结论!slice扩容其实远没有这么单纯!
growslice 这个函数的参数依次是 元素的类型,老的 slice,新 slice 最小求的容量。
因此正确的运行结果是: len=5, cap=6
按最开始的结论,你可能会这么想:
原 slice 容量小于 1024,扩容时容量每次增加 1 倍,添加元素 6 的时候,容量变为10;添加元素7的时候,容量还是够的,不会扩容,依然为10.所以你的结论是: len=7, cap=10
那么恭喜你这个时候是结论又是对的!
懵逼了没?崩溃了没?
为了避免困惑,我们来总结一下吧:
新旧长度之和,即最终slice长度
slice在append时,必须关注最终slice的长度是否超过原容量的2倍
最后,执行内存对齐操作,这一步是一定不能少的!
如果实在不知道对齐的最终结果,那么你按这个规律来找到最接近的值吧: 0、1、2、4、6、8、10、12、14、16、18、20 .... 即2的倍数
就像例二所述,cap=5时,执行内存对齐操作,最终结果是cap=6
最最后,来个小练习:
5.新切片长度不为0时
示例4、5说明是按被追加切片的长度(而不是容量)来计算扩容的。
以上示例是针对长度小于1024的情况,大于1024的情况同样适用。
slice的形容词为:sliceable。sliceable意思是:可切成片的; 可分割的;
可分割的
sliceable的例句:
Genetic diversity in three species of Casuarina from Xiamen and their relationships were studied by horizontal?sliceable?strach gel?electrophoresis.
利用水平切片淀粉凝胶电泳技术,对厦门市木麻黄属的三种木麻黄种内遗传变异和种间亲缘关系进行了研究。
slice?
n. 薄片;部分;菜刀,火铲
vt. 切下;把…分成部分;将…切成薄片
vi. 切开;割破
slice的词组
a slice of?一片,一份
thin slice?薄片
slice of bread?面包片
time slice?时间片;时间片段;时间区分
slice off?v. 切开;割掉
tissue slice?组织切片
好了,今天我们就此结束对“slice”的讲解。希望您已经对这个主题有了更深入的认识和理解。如果您有任何问题或需要进一步的信息,请随时告诉我,我将竭诚为您服务。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。