JavaScript Array splice vs slice

时间:2016-06-02 20:13:41

标签: javascript

spliceslice之间的区别是什么?

$scope.participantForms.splice(index, 1);
$scope.participantForms.slice(index, 1);

16 个答案:

答案 0 :(得分:119)

slice()更改了原始数组,而var array=[1,2,3,4,5]; console.log(array.splice(2)); 没有更改,但它们都返回数组对象。

请参阅以下示例:

[3,4,5]

这将返回array原始数据受影响,导致[1,2]var array=[1,2,3,4,5] console.log(array.slice(2));

[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);

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



{{1}}




答案 1 :(得分:38)

Splice和Slice都是Javascript数组函数。

Splice vs Slice

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

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

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

  4. 与示例拼接

    参数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]
    
    
    

    使用示例切片

    参数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]
    
    
    

答案 2 :(得分:15)

slice()方法将数组的一部分副本返回到新的数组对象中。

$scope.participantForms.slice(index, 1);

NOT 更改participantForms数组但返回一个新数组,其中包含在原始数组中index位置找到的单个元素。

splice()方法通过删除现有元素和/或添加新元素来更改数组的内容。

$scope.participantForms.splice(index, 1);

这会从participantForms位置的index数组中删除一个元素。

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

答案 3 :(得分:12)

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

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

  • Splice()方法可以使用n个参数:

    参数1:索引,必需。

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

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

  • slice()方法可以使用2个参数:

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

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

答案 4 :(得分:10)

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

SP LICE =给出阵列的一部分并 SP 保留原始阵列

我个人觉得这很容易记住,因为这两个词总是让我作为Web开发的初学者感到困惑。

答案 5 :(得分:9)

接头-MDN reference-ECMA-262 spec

语法
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 ]

MDN Splice examples

中的更多示例

切片-MDN reference-ECMA-262 spec

语法
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 ]

MDN Slice examples

中的更多示例

性能比较

请不要将此视为绝对真理,因为根据每种情况,一个方案可能比另一个方案更为出色。
Performance test

答案 6 :(得分:3)

Splice和Slice是内置的Javascript命令 - 而不是AngularJS命令。 Slice返回" start"中的数组元素。直到"结束"符。 Splice改变了实际的数组,并从" start"开始。并保持指定的元素数量。谷歌有很多信息,只需搜索。

答案 7 :(得分:3)

大多数答案过于罗word。

  • spliceslice返回数组中其余的元素。
  • splice使正在操作的数组发生变化,而元素slice未被删除。

enter image description here

答案 8 :(得分:2)

通过索引拼接和删除数组项

  

index = 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);

enter image description here

答案 9 :(得分:2)

另一个例子:

[2,4,8].splice(1, 2) -> returns [4, 8], original array is [2]

[2,4,8].slice(1, 2) -> returns 4, original array is [2,4,8]

答案 10 :(得分:2)

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].

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.

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

答案 11 :(得分:1)

这是记住切片与拼接之间区别的简单技巧

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"]

Trick to remember:

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

答案 12 :(得分:1)

Slice()和Splice()JavaScript内置函数之间的区别是, Slice返回已删除的项目,但没有更改原始数组;

        // (original Array)
        let array=[1,2,3,4,5] 
        let index= array.indexOf(4)
         // index=3
        let result=array.slice(index)
        // result=4  
        // after slicing=>  array =[1,2,3,4,5]  (same as original array)

但是在splice()的情况下,它会影响原始数组;喜欢,

         // (original Array)
        let array=[1,2,3,4,5] 
        let index= array.indexOf(4)
         // index=3
        let result=array.splice(index)
        // result=4  
        // after splicing array =[1,2,3,5]  (splicing affects original array)

答案 13 :(得分:0)

//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);

答案 14 :(得分:0)

JavaScript数组splice()示例方法

tutsmake的Example1-从索引2中删除2个元素

  var arr = [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ]; 

 arr.splice(1,2);

 console.log( arr ); 

Example-2通过tutsmake –从索引0 JavaScript添加新元素

  var arr = [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ]; 

 arr.splice(0,0,"zero");

 console.log( arr );  

tutsmake的Example-3 –在数组JavaScript中添加和删除元素

var months = ['Jan', 'March', 'April', 'June'];

months.splice(1, 0, 'Feb'); // add at index 1

console.log(months); 

months.splice(4, 1, 'May'); // replaces 1 element at index 4

console.log(months);

https://www.tutsmake.com/javascript-array-splice-method-by-example/

答案 15 :(得分:0)

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

  • SP虱子会改变你的原始数组。
  • S虱子不会改变您的原始数组。