问题描述
这是我关于 stackoverflow 的第一个问题,我是新手 :) 学习 JS。我有个问题。我写了这个函数:
function inverseSlice(items,a,b) {
return items.splice(a,b);
}
inverseSlice([1,2,3,4,5,6],4)
(4) [3,6]
为什么这个函数返回最后 4 位数字,根据 MDN 上的文档(我已经阅读了 10 次:P) splice() 方法在这里应该只删除 2 个中间的数字 (3,4)?它应该返回 [1,6]。我对吗?谢谢你的帮助:)
解决方法
splice
会
- 修改原始数组:删除 N 项,其中 N 是第三个参数,从起始索引(第一个参数)开始到指定的数字(因此,在这里,它将从数组中删除索引 2 到 5;索引 2,3,4,5,总共删除了4个)
- 返回移除的元素 - 所以,这里是
[3,6]
。
原始数组现在是 [1,2]
,但您记录的是 .splice
返回的内容,而不是原始数组。
如果您想要 [1,2,6]
,您需要为第三个参数指定 2(要删除的 2 个项目),然后记录原始数组:
function inverseSlice(items,a,b) {
return items.splice(a,b);
}
const arr = [1,6];
const removedItems = inverseSlice(arr,2);
console.log(arr);
console.log(removedItems);
它正在做它宣传的那样,它“返回一个包含已删除元素的数组。”
function inverseSlice(items,b);
}
let array = [1,6,7,8];
// Deletes 4 entries starting at index 2,// or in other words [3,6] are snipped
inverseSlice(array,4);
console.log(array);
除非您保留对传入数组的引用,否则您将永远不会观察到有关它如何结束的任何信息,您只会获得已删除的元素。
,您对 splice 的参数感到困惑,传递给 splice 的两个参数 不是开始和结束索引,而是 开始索引和要添加的项目数已删除。
因此,在您的示例中,它从 2 到 5 索引中删除了项目并返回结果数组,即 [3,6]
根据docs:
语法:
let arrDeletedItems = arr.splice(start[,deleteCount[,item1[,item2[,...]]]])
参数
- Start :开始更改数组的索引。
- deleteCount:n 个整数,表示数组中要从头开始删除的元素数。
- item1,item2,... :要添加到数组中的元素,从头开始。如果不指定任何元素, splice() 只会删除 数组中的元素。