为什么 .splice() 方法删除不同索引的元素?

问题描述

这是我关于 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() 只会删除 数组中的元素。