JavaScript数组拼接与切片

spliceslice之间的区别是什么?

const array = [1, 2, 3, 4, 5];
array.splice(index, 1);
array.slice(index, 1);
470501 次浏览

Splice和Slice是内置的Javascript命令,而不是特定的AngularJS命令。Slice返回从“start”到“end”说明符之前的数组元素。Splice改变实际的数组,从“start”开始,并保持指定的元素数量。谷歌有很多这方面的信息,只要搜索。

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

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

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

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

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

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

这些是Javascript的原生函数,与AngularJS无关。

splice()改变原始数组,而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);

Splice和Slice都是Javascript数组函数。

拼接与切片

  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]

切片示例

论据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]

拼接- MDN参考 - ecma - 262规范

< p > 语法
array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) < / p >

参数

    <李> 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示例


Slice - MDN参考 - ecma - 262规范

< p > 语法
array.slice([begin[, end]])
参数< / >强

    <李> begin:可选的。初始索引(默认为0).
    如果begin为负,则根据规范(下面提供的示例)将其视为"Math.max((array.length + begin), 0)",有效地从array的末尾开始
  • end:可选的。抽取的最后一个索引,但不包括(default 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切片示例

性能比较

不要认为这是绝对的真理,因为根据不同的场景,一个可能比另一个表现更好。
性能测试 < / p >

拼接,根据索引删除数组项

指数= 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);

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

enter image description here

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

这里有一个简单的技巧来记住slicesplice之间的区别

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)视为“指定长度”的缩写,即第二个参数应该是一个长度,而不是一个索引

JavaScript数组拼接()方法示例

从索引1中删除2个元素

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


arr.splice(1,2);


console.log( arr ); 

例2通过tutsmake从索引0 JavaScript中添加新元素

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


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


console.log( arr );  

示例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/

另一个例子:

[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]
javascript内置函数Slice()和Splice()的区别是: Slice返回删除的项,但没有改变原始数组; 如,< / p >
        // (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,5]
// after splicing array =[1,2,3]  (splicing affects original array)

切片不改变原始数组,它返回新的数组,但拼接改变原始数组。

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

拼接方法的第二个参数不同于切片方法。在拼接中,第二个参数表示要删除的元素的计数,在切片中,它表示结束索引。

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开始。 以上是拼接法和切片法的主要区别

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

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

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

    论点1:索引,必需。

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

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

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

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

    观点2:可选的。指定在何处结束选择的整数。如果省略,将选择从数组开始位置到数组结束的所有元素。

    .使用负数从数组的末尾选择

大多数答案都太啰嗦了。

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

enter image description here

年代虱子 =给出数组的一部分&没有拆分原始数组

SP虱子 =给出数组的一部分&SPlitting原始数组

我个人觉得这更容易记住,因为这两个术语总是让我这个网页开发初学者感到困惑。

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

  • SPlice将改变你的原始数组。
  • 年代lice不会改变你的原始数组。

片()方法副本处理数组的给定部分,并将复制的部分作为一个新数组返回。它不会改变原始数组。

接头()方法通过向数组中添加或删除元素来创建数组。

下面是语法:

array.slice(from, until);


// example
let array = [1, 2, 3, 4, 5, 6]
let newArray = array.slice(1, 3)
console.log({array, newArray})


// output: array: [1, 2, 3, 4, 5, 6], newArray: [2, 3]

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

下面是拼接语法:

//For removing elements, we need to give the index parameter,
// and the number of elements to be removed


array.splice(index, number of elements to be removed);




//example
let array = [1, 2, 3, 4, 5, 6]
let newArray = array.splice(1, 3)
console.log({array, newArray})


// output: array: [1, 5, 6], newArray: [2, 3, 4]

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

// For adding elements, we need to give them as the 3rd, 4th, ... parameter
array.splice(index, number of elements to be removed, element, element);


//example
let array = [1, 2, 3, 4, 5, 6]
let newArray = array.splice(1, 3, 'a', 'b')
console.log({array, newArray})


// output: array: [1, ,'a', 'b', 5, 6], newArray: [2, 3, 4]


相关链接:

让我们澄清关于slice(), splice(), &JavaScript中的split()方法

Array.prototype.slice() .slice(

Array.prototype.splice() .splice(

slicesplice密切相关,但用途却非常不同:

slice函数用于选择数组的一部分。它的目的是返回值。它的执行并不影响它的主题。

splice函数用于从数组中移除元素。它的目的是修饰它的主题。如果需要,它仍然返回已删除项的副本,以供参考。

有3个不同点:

  1. Splice将从原始数组中删除所选元素,并将它们作为一个新数组返回-注意,原始数组将不再有它们-。Slice将使用所选元素创建一个新数组,而不会影响原来的数组。

  2. Splice接收起始索引和从该点移除多少元素作为参数。Slice接收2个索引,开始和结束。

  3. Splice可用于通过传递可选参数在数组中的特定位置添加元素。

这两种方法对初学者来说很容易混淆。我研究并发现了slicesplice中的4个关键点。你可以阅读更多关于切片与拼接的细节。

JavaScript切片

  • Slice只是从数组中返回指定数量的元素。例如,你有一个包含10个元素的数组,你只想从第二个下标中获取3个元素。
  • 它不修改原始数组,而是返回元素的数量。
  • 切片的语法是array.slice(startingIndex, elementCount)

在JavaScript中拼接

  • Splice也可以从数组中返回与切片相同的选定元素,但它会修改原始数组。

  • 您可以使用splice在特定索引上在数组中添加新元素

  • 你可以删除指定的元素,也可以同时添加新元素。

  • 使用splice的语法是array.splice(startingIndex, removeCounter, newElement(s)[optional])

总结

切片的目的是只从数组中获取选定的元素,而不修改原始数组。 当您想通过删除元素和添加新元素来修改原始数组时,应该使用拼接