JavaScript Array splice vs slice

Ren*_*tin 128 javascript

splice和之间有什么区别slice

$scope.participantForms.splice(index, 1);
$scope.participantForms.slice(index, 1);
Run Code Online (Sandbox Code Playgroud)

Tha*_*var 189

splice()更改原始数组,而slice()不是.

请参阅以下示例:

var array=[1,2,3,4,5];
console.log(array.splice(2));
Run Code Online (Sandbox Code Playgroud)

这将返回[3,4,5].的原始阵列受到影响,导致array[1,2].

var array=[1,2,3,4,5]
console.log(array.slice(2));
Run Code Online (Sandbox Code Playgroud)

这将返回[3,4,5].的原始数组不受影响,由此导致array存在[1,2,3,4,5].

下面是简单的小提琴,证实了这一点:

//splice
var array=[1,2,3,4,5];
console.log(array.splice(2));

//slice
var array2=[1,2,3,4,5]
console.log(array2.slice(2));


console.log("----after-----");
console.log(array);
console.log(array2);
Run Code Online (Sandbox Code Playgroud)

  • 你可以把它想象成“拼接”就像政府向你征税。而“slice”更像是一个复制粘贴工具。 (14认同)
  • 同样重要的是要观察slice()数组方法可以通过不传递任何参数`arr1 = arr0.slice()`来复制数组。 (12认同)
  • **拼接**或者就像我倾向于说的那样_“**切片**和**p**lunder来自调用者的值”_。 (11认同)
  • `.splice()` 是**极其**不直观的,我只是花了很长时间试图弄清楚为什么对原始数组的引用返回“未定义”,直到我找到这个线程。 (5认同)

Gag*_*hir 46

Splice和Slice都是Javascript Array函数.

拼接vs切片

  1. splice()方法返回数组中已删除的项,slice()方法返回数组中的选定元素,作为新的数组对象.

  2. splice()方法更改原始数组,而slice()方法不会更改原始数组.

  3. splice()方法可以使用n个参数,slice()方法可以使用2个参数.

用例子拼接

参数1:索引,必需.一个整数,指定添加/删除项目的位置,使用负值指定数组末尾的位置.

参数2:可选.要删除的项目数.如果设置为0(零),则不会删除任何项目.如果没有通过,将删除提供的索引中的所有项目.

参数3 ... n:可选.要添加到数组的新项目.

var array=[1,2,3,4,5];
console.log(array.splice(2));
// shows [3, 4, 5], returned removed item(s) as a new array object.
 
console.log(array);
// shows [1, 2], original array altered.
 
var array2=[6,7,8,9,0];
console.log(array2.splice(2,1));
// shows [8]
 
console.log(array2.splice(2,0));
//shows [] , as no item(s) removed.
 
console.log(array2);
// shows [6,7,9,0]
Run Code Online (Sandbox Code Playgroud)

用例子切片

参数1:必需.一个整数,指定开始选择的位置(第一个元素的索引为0).使用负数从数组的末尾进行选择.

参数2:可选.一个整数,指定结束选择但不包括的位置.如果省略,将选择从数组的起始位置到结尾的所有元素.使用负数从数组的末尾进行选择.

var array=[1,2,3,4,5]
console.log(array.slice(2));
// shows [3, 4, 5], returned selected element(s).
 
console.log(array.slice(-2));
// shows [4, 5], returned selected element(s).
console.log(array);
// shows [1, 2, 3, 4, 5], original array remains intact.
 
var array2=[6,7,8,9,0];
console.log(array2.slice(2,4));
// shows [8, 9]
 
console.log(array2.slice(-2,4));
// shows [9]
 
console.log(array2.slice(-3,-1));
// shows [8, 9]
 
console.log(array2);
// shows [6, 7, 8, 9, 0]
Run Code Online (Sandbox Code Playgroud)

  • 尽管这两个函数执行的任务完全不同,但与`splice(x,y)`不同的是,在`slice(x,y)`中,第二个参数y不是从x的位置开始计数,而是从数组的第一个元素开始计数。 (2认同)

vik*_*mvi 35

S LICE = 给出数组的一部分 &拆分原始数组

SP LICE = 给出数组的一部分和SP点亮原始数组

我个人发现这更容易记住,因为这两个术语总是让我作为 Web 开发的初学者感到困惑。

  • 拼接 -> ctrl+X + ctrl+V 切片 -> ctrl +C (18认同)
  • 非常聪明!感谢分享! (3认同)

Saj*_*ran 17

这是一个简单的技巧,可以记住slicevs与splice

var a=['j','u','r','g','e','n'];

// array.slice(startIndex, endIndex)
a.slice(2,3);
// => ["r"]

//array.splice(startIndex, deleteCount)
a.splice(2,3);
// => ["r","g","e"]
Run Code Online (Sandbox Code Playgroud)

Trick to remember:

认为是"spl" (first 3 letters of splice)“指定长度”的缩写,第二个参数应该是长度而不是索引

  • 这不仅仅是您指定参数的方式。其中之一(拼接)修改基本数组,而另一个则不修改。 (3认同)
  • 也可以将 splice 视为 split(生成 2 个数组)+ slice (2认同)

Ale*_*ets 16

所述切片()方法返回的阵列的一部分的副本到一个新的数组对象.

$scope.participantForms.slice(index, 1);
Run Code Online (Sandbox Code Playgroud)

这并改变participantForms阵列,但返回包含在找到的单个元素的新阵列index的原始数组中的位置.

拼接()方法改变阵列的通过去除现有元件和/或添加新元素的内容.

$scope.participantForms.splice(index, 1);
Run Code Online (Sandbox Code Playgroud)

这将从participantFormsindex位置的数组中删除一个元素.

这些是Javascript本机函数,AngularJS与它们无关.

  • 哦!我看到这是非常明确的解释! (3认同)
  • 这个答案部分不正确。对于“splice”,第二个参数是返回数组中的元素计数,但对于“slice”,第二个参数是要返回的最终元素的索引+1。“slice(index,1)”不一定返回数组从“index”开始的一个元素。`[1,2,3,4,5].slice(0,1)` 返回 `[1]` 但 `[1,2,3,4,5].slice(3,1)` 返回 `[ ]` 因为“1”被解释为“最终索引 +1”,因此“最终索引 = 0”,但这是在“开始索引 = 3”之前,因此返回空数组。 (2认同)

小智 16

splice()方法返回数组中删除的项目。该slice()方法返回数组中选定的元素,作为一个新的数组对象。

splice()方法更改原始数组,slice()方法不更改原始数组。

  • Splice() 方法可以接受 n 个参数:

    参数 1:索引,必需。

    参数 2:可选。要删除的项目数。如果设置为 0(零),则不会删除任何项目。如果未通过,将删除所提供索引中的所有项目。

    参数 3..n:可选。要添加到数组中的新项目。

  • slice() 方法可以接受 2 个参数:

    参数 1:必需。一个整数,指定从哪里开始选择(第一个元素的索引为 0)。使用负数从数组的末尾进行选择。

    参数 2:可选。一个整数,指定结束选择的位置。如果省略,将选择从开始位置到数组末尾的所有元素。使用负数从数组的末尾进行选择。


tag*_*izy 11

Splice - MDN参考 - ECMA-262规范

句法
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

参数

  • start:必填.初始指数.
    如果start是否定的,"Math.max((array.length + start), 0)"则从结尾处有效地按照规范(下面提供的示例)处理array.
  • deleteCount: 可选的.要删除的元素数量(start如果未提供,则全部来自).
  • item1, item2, ...: 可选的.要从start索引添加到数组的元素.

返回:包含已删除元素的数组(如果没有删除则为空数组)

变异原始数组:是的

例子:

const array = [1,2,3,4,5];

// Remove first element
console.log('Elements deleted:', array.splice(0, 1), 'mutated array:', array);
// Elements deleted: [ 1 ] mutated array: [ 2, 3, 4, 5 ]

// array = [ 2, 3, 4, 5]
// Remove last element (start -> array.length+start = 3)
console.log('Elements deleted:', array.splice(-1, 1), 'mutated array:', array);
// Elements deleted: [ 5 ] mutated array: [ 2, 3, 4 ]
Run Code Online (Sandbox Code Playgroud)

MDN Splice示例中的更多示例


切片 - MDN参考 - ECMA-262规范

语法
array.slice([begin[, end]])
参数

  • begin: 可选的.初始索引(默认为0).
    如果begin是否定的,"Math.max((array.length + begin), 0)"则从结尾处有效地按照规范(下面提供的示例)处理array.
  • end: 可选的.最后提取索引但不包括(默认array.length).如果end是否定的,"Math.max((array.length + begin),0)"则从结尾处有效地按照规范(下面提供的示例)处理array.

返回:包含提取元素的数组.

变异原文:没有

例子:

const array = [1,2,3,4,5];

// Extract first element
console.log('Elements extracted:', array.slice(0, 1), 'array:', array);
// Elements extracted: [ 1 ] array: [ 1, 2, 3, 4, 5 ]

// Extract last element (start -> array.length+start = 4)
console.log('Elements extracted:', array.slice(-1), 'array:', array);
// Elements extracted: [ 5 ] array: [ 1, 2, 3, 4, 5 ]
Run Code Online (Sandbox Code Playgroud)

MDN Slice示例中的更多示例

性能比较

不要将此视为绝对真理,因为取决于每个场景可能比另一个场景更高效.
性能测试


snr*_*snr 9

大多数答案都太罗嗦了。

  • spliceslice返回数组中的其余元素。
  • splice改变正在操作的数组,同时删除元素,而 slice不是删除元素。

在此输入图像描述


Ame*_*icA 8

两者都返回相同的答案,但是:

  • SP虱子会改变你原来的阵列。
  • Slice不会改变你的原始数组。


小智 7

Splice和Slice是内置的Javascript命令-尤其不是AngularJS命令。Slice从“开始”返回数组元素,直到“结束”说明符之前。拼接会更改实际数组,并从“开始”开始,并保留指定的元素数。Google对此有很多信息,只需搜索即可。

  • 拼接_deletes_指定的数字,然后插入任何后续参数。 (2认同)

mo3*_*o3n 7

slice ()方法复制数组的给定部分并将复制的部分作为新数组返回。它不会改变原始数组。

\n

splice ()方法通过添加或删除元素来更改数组。

\n

这是切片语法:

\n
array.slice(from, until);\n\n// example\nlet array = [1, 2, 3, 4, 5, 6]\nlet newArray = array.slice(1, 3)\nconsole.log({array, newArray})\n\n// output: array: [1, 2, 3, 4, 5, 6], newArray: [2, 3]\n
Run Code Online (Sandbox Code Playgroud)\n

注意:Slice() 方法也可用于字符串。

\n

这是拼接语法:

\n
//For removing elements, we need to give the index parameter,\n// and the number of elements to be removed\n\narray.splice(index, number of elements to be removed);\n\n\n//example\nlet array = [1, 2, 3, 4, 5, 6]\nlet newArray = array.splice(1, 3)\nconsole.log({array, newArray})\n\n// output: array: [1, 5, 6], newArray: [2, 3, 4]\n
Run Code Online (Sandbox Code Playgroud)\n

注意:如果我们不定义第二个参数,则从给定索引开始的每个元素都将从数组中删除

\n
// For adding elements, we need to give them as the 3rd, 4th, ... parameter\narray.splice(index, number of elements to be removed, element, element);\n\n//example\nlet array = [1, 2, 3, 4, 5, 6]\nlet newArray = array.splice(1, 3, \'a\', \'b\')\nconsole.log({array, newArray})\n\n// output: array: [1, ,\'a\', \'b\', 5, 6], newArray: [2, 3, 4]\n\n
Run Code Online (Sandbox Code Playgroud)\n

相关链接:

\n

让\xe2\x80\x99s 澄清 JavaScript 中关于 slice( )、splice( ) 和 split( ) 方法的混乱

\n

Array.prototype.slice()

\n

Array.prototype.splice()

\n


xgq*_*rms 5

按索引拼接和删除数组项

指数 = 2

//splice & will modify the origin array
const arr1 = [1,2,3,4,5];
//slice & won't modify the origin array
const arr2 = [1,2,3,4,5]

console.log("----before-----");
console.log(arr1.splice(2, 1));
console.log(arr2.slice(2, 1));

console.log("----after-----");
console.log(arr1);
console.log(arr2);
Run Code Online (Sandbox Code Playgroud)

let log = console.log;

//splice & will modify the origin array
const arr1 = [1,2,3,4,5];

//slice & won't modify the origin array
const arr2 = [1,2,3,4,5]

log("----before-----");
log(arr1.splice(2, 1));
log(arr2.slice(2, 1));

log("----after-----");
log(arr1);
log(arr2);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


dev*_*rma 5

slice 不会更改原始数组,它返回新数组,但 splice 会更改原始数组。

example: var arr = [1,2,3,4,5,6,7,8];
         arr.slice(1,3); // output [2,3] and original array remain same.
         arr.splice(1,3); // output [2,3,4] and original array changed to [1,5,6,7,8].
Run Code Online (Sandbox Code Playgroud)

splice 方法的第二个参数与 slice 方法不同。splice 中的第二个参数表示要删除的元素的数量,在 slice 中它表示结束索引。

arr.splice(-3,-1); // output [] second argument value should be greater then 
0.
arr.splice(-3,-1); // output [6,7] index in minus represent start from last.
Run Code Online (Sandbox Code Playgroud)

-1代表最后一个元素,因此它从-3到-1开始。以上是拼接和切片方法的主要区别。