当我使用Array.splice()时,它'i’s like i'm使用Array.slice()

When i use Array.splice(), it's like i'm using Array.slice()?

本文关键字:Array 使用 slice like splice      更新时间:2023-09-26

所以我刚刚注意到,当我使用Array.splice()时,就像我在使用Array.slice(),

所以当我键入[0, 1, 2, 3].splice(0, 2)时,它会返回[0, 1]?(是的,我很抱歉我输入的是splice而不是slice

基本上:

[0, 1, 2, 3, 4, 5].splice(0, 2);
returns [0, 1]?
[0, 1, 2, 3, 4, 5].splice(3, 1);
returns [3]?
[0, 1, 2, 3, 4, 5].slice(0, 2);
returns [0, 1]
[0, 1, 2, 3, 4, 5].slice(3, 1);
returns [3]

为什么会发生这种情况?它应该删除指定的对象,对吗?

当然,它返回相同的东西,只是slice不会改变原始数组。另一方面,拼接返回从原始阵列中删除的内容。

slice获取数组一部分的副本并返回。

splice移除数组的一部分并返回它。一个可选参数也允许用其他元素替换这些元素。

splice方法修改要调用的数组的内容。

splice()方法通过移除现有元素和/或添加新元素。

slice方法返回给定索引范围中的新数组副本。

slice()方法返回数组一部分的浅拷贝转换为新的数组对象。

  • splice()用其他项替换项,从而更改输入数组
  • slice()只是从一个数组中获取而不更改它

由于您没有使用变量作为输入,因此您永远看不到差异。但试试这个:

a = [4, 5, 6, 7, 8]
> [4, 5, 6, 7, 8]
a.splice(2, 2)
> [6, 7]
a
> [4, 5, 8]

a已更改。那是splice()

真正的力量来自替代:

a = [3, 4, 5, 6, 7]
> [3, 4, 5, 6, 7]
a.splice(2, 2, 500, 600)
> [5, 6]
a
> [3, 4, 500, 600, 7]

如果您有一个项目数组要"拼接"到数组中,则必须使用.apply:

a = [3, 4, 5, 6, 7]
> [3, 4, 5, 6, 7]
b = [500, 600]
>  [500, 600]
a.splice.apply(a, [2, 2].concat(b))
> [5, 6]
a
> [3, 4, 500, 600, 7]

或者让你自己的函数更可读。

您也可以通过使第二个参数0:a.splice(2, 0, 500, 600)将add项拼接到一个数组中。

你可以在文档中阅读所有这些,甚至更多!