Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Splice 理解拼接还是不理解拼接?_Splice_Array Splice - Fatal编程技术网

Splice 理解拼接还是不理解拼接?

Splice 理解拼接还是不理解拼接?,splice,array-splice,Splice,Array Splice,请忽略这个问题 让鱼=[“食人鱼”、“梭鱼”、“锦鲤”、“鳗鱼”] 既然第一个数字1代表数组中的位置“梭鱼”,2代表要移除的项目,为什么不移除“锦鲤”和“鳗鱼”(后面的两个位置),而是移除“鳗鱼”和“食人鱼”(第二个和第三个轮换) 为什么不删除“锦鲤”和“鳗鱼”(后面的两个位置) 为什么会这样?查看数组索引和这些位置的值: fish[0] "piranha" fish[1] "barracuda" fish[2] "koi" fish[3] "eel" fish.spl

请忽略这个问题

让鱼=[“食人鱼”、“梭鱼”、“锦鲤”、“鳗鱼”]

既然第一个数字1代表数组中的位置
“梭鱼”
,2代表要移除的项目,为什么不移除
“锦鲤”
“鳗鱼”
(后面的两个位置),而是移除
“鳗鱼”
“食人鱼”
(第二个和第三个轮换)

为什么不删除“锦鲤”和“鳗鱼”(后面的两个位置)

为什么会这样?查看数组索引和这些位置的值:

fish[0]    "piranha"
fish[1]    "barracuda"
fish[2]    "koi"
fish[3]    "eel"
fish.splice(1,2)
说(正如您自己写的那样)从位置1开始,它应该删除2个元素

因此,在位置1,我们有梭鱼,它被移除了。但是您说过要删除2个元素,而不是1个,所以它删除了另一个元素:在位置1处,我们现在有
koi
,它也被删除

最终的结果是梭鱼和锦鲤被移除了,我们剩下的
[“食人鱼”,“鳗鱼”]

您可以想象
splice
的工作方式如下:

//定义'remove'和'insert'原语。
//是的,我知道我现在用“splice”解释“splice”。。。但是想想看
//这些是在给定位置移除(和返回)或插入一个元素的基本方法
//位置。
常量删除=(数组,索引)=>array.splice(索引,1)
常量插入=(数组,索引,el)=>array.splice(索引,0,el)
//我们自己的“拼接”实现,只使用删除/插入原语。
//我在前面添加数组本身作为附加参数。
函数(数组、位置、removeCount=null、…新元素){
//注:这不会模拟splice()的行为,splice(未定义),
//拼接(未定义,未定义)和类似的东西,它们的行为不尽相同
//相同。它至少假定一个有效位置。
//负位置表示从数组的*末端*开始的N个元素。
如果(位置<0)位置+=数组长度
//未指定移除计数意味着移除从给定值开始的所有元素
//位置(请注意,在实际拼接功能中,仅当
//参数被省略,而不是在未定义或为空时)
if(removeCount==null)removeCount=array.length-位置
//从给定位置开始移除给定数量的元素
删除常量=[]
for(设i=0;i
完全误读了结果。。。我看到“鳗鱼”和“食人鱼”被移除,而不是正确的,因为它们被留在。。。我的错误。啊,那可能是因为
splice
返回删除的元素。因此,您可能查看的是返回值,而不是数组的新内容。
fish[0]    "piranha"
fish[1]    "barracuda"
fish[2]    "koi"
fish[3]    "eel"