Épissure de tableau JavaScript vs tranche


223

Quelle est la différence entre spliceet slice?

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

2
Splice et Slice sont des commandes Javascript intégrées - pas spécifiquement des commandes AngularJS. Slice renvoie les éléments du tableau depuis le "début" jusqu'à juste avant les spécificateurs "fin". Splice mute le tableau réel, démarre au «début» et conserve le nombre d'éléments spécifié. Google a beaucoup d'informations à ce sujet, il suffit de rechercher.
mrunion

1
vérifiez si cette réponse vous aide à stackoverflow.com/questions/1777705/…
Fábio Luiz

Les méthodes splice () mutent un tableau en l'ajoutant au tableau ou en le supprimant d'un tableau et ne retournent que les éléments supprimés.
Shaik Md N Rasool le

Ils devraient avoir des noms interchangés pour communiquer leur signification réelle, par exemple une tranche de gâteau - couper un gros gâteau et en donner une partie. Mais en réalité, il fait exactement le contraire en gardant le gâteau original intact et en en donnant une part, comment est-ce possible.
vikramvi

Réponses:


296

splice()modifie le tableau d'origine alors que slice()ne le fait pas mais les deux retournent un objet tableau.

Voir les exemples ci-dessous:

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

Cela reviendra [3,4,5]. Le tableau d' origine est affectée pour résultat d' arrayêtre [1,2].

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

Cela reviendra [3,4,5]. Le tableau original n'est pas affectée avec pour résultat d' arrayêtre [1,2,3,4,5].

Ci-dessous, un simple violon qui confirme ceci:

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


24
Il est également important d'observer que la méthode de tableau slice () peut être utilisée pour copier des tableaux en ne passant aucun argumentarr1 = arr0.slice()
Mg Gm

6
Vous pouvez y penser comme splicesi un gouvernement vous prenait des impôts. Considérant que slicec'est plus un copieur-coller.
radbyx le

2
.splice()est extrêmement peu intuitif, je viens de passer des siècles à essayer de comprendre pourquoi les références au tableau d'origine revenaient undefinedjusqu'à ce que je trouve ce fil.
Nixinova le

68

Splice et Slice sont tous deux des fonctions Javascript Array.

Épissure vs tranche

  1. La méthode splice () retourne le ou les éléments supprimés dans un tableau et la méthode slice () renvoie le ou les éléments sélectionnés dans un tableau, en tant que nouvel objet de tableau.

  2. La méthode splice () modifie le tableau d'origine et la méthode slice () ne modifie pas le tableau d'origine.

  3. La méthode splice () peut prendre n nombre d'arguments et la méthode slice () prend 2 arguments.

Splice avec exemple

Argument 1: index, obligatoire. Un entier qui spécifie à quelle position ajouter / supprimer des éléments. Utilisez des valeurs négatives pour spécifier la position à partir de la fin du tableau.

Argument 2: facultatif. Le nombre d'éléments à supprimer. S'il est défini sur 0 (zéro), aucun élément ne sera supprimé. Et s'il n'est pas passé, tous les éléments de l'index fourni seront supprimés.

Argument 3… n: facultatif. Le ou les nouveaux éléments à ajouter au tableau.

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]

Tranche avec exemple

Argument 1: obligatoire. Un entier qui spécifie où commencer la sélection (le premier élément a un index de 0). Utilisez des nombres négatifs pour sélectionner à la fin d'un tableau.

Argument 2: facultatif. Entier qui spécifie où terminer la sélection, mais ne comprend pas. Si omis, tous les éléments de la position de départ et jusqu'à la fin du tableau seront sélectionnés. Utilisez des nombres négatifs pour sélectionner à partir de la fin d'un tableau.

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]


3
Bien que les deux fonctions effectuent des tâches assez différentes, contrairement splice(x,y)au slice(x,y)second argument , le deuxième argument yn'est pas compté à partir de la position de x, mais à partir du premier élément du tableau.
Ramesh Pareek

Une dernière chose que j'ai notée: au lieu de array.slice(index, count), si vous utilisez array.slice((index, count)), vous obtiendrez la partie restante après le «tranchage». Essayez-le!
Ramesh Pareek

27

Voici une astuce simple pour se souvenir de la différence entre slicevssplice

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:

Pensez "spl" (first 3 letters of splice)à court pour "spécifier la longueur", que le deuxième argument doit être une longueur et non un index


2
Il ne s'agit pas simplement de spécifier les arguments. L'un d'eux (splice) modifie le tableau de base et l'autre pas.
Arbiter le

pourrait également considérer l'épissure comme une division (génère 2 tableaux) + tranche

23

La méthode slice () retourne une copie d'une partie d'un tableau dans un nouvel objet tableau.

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

Cela ne change PAS le participantFormstableau mais retourne un nouveau tableau contenant l'élément unique trouvé à la indexposition dans le tableau d'origine.

La méthode splice () modifie le contenu d'un tableau en supprimant des éléments existants et / ou en ajoutant de nouveaux éléments.

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

Cela supprimera un élément du participantFormstableau à la indexposition.

Ce sont les fonctions natives Javascript, AngularJS n'a rien à voir avec elles.


Quelqu'un peut-il donner des exemples utiles et qu'est-ce qui serait idéal pour chacun? Vous aimez les situations où vous préférez utiliser une épissure ou une tranche?
petrosmm

1
cette réponse est partiellement incorrecte. pour splicele 2ème argument est le nombre d'éléments dans le tableau de retour, mais pour slicele 2ème arg est l'indice de l'élément final à renvoyer + 1. slice(index,1)ne renvoie pas nécessairement un tableau d'un élément commençant à index. [1,2,3,4,5].slice(0,1)renvoie [1]mais [1,2,3,4,5].slice(3,1)retourne []car 1est interprété comme final index +1tel, final index = 0mais c'est avant, start index = 3donc un tableau vide est renvoyé.
BaltoStar

Pourquoi n'est-ce pas la meilleure réponse?
JJ Labajo

14

Splice - Référence MDN - Spécification ECMA-262

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

Paramètres

  • start: obligatoire. Index initial.
    Si elle startest négative, elle est traitée conformément "Math.max((array.length + start), 0)"aux spécifications (exemple fourni ci-dessous) efficacement à partir de la fin de array.
  • deleteCount: optionnel. Nombre d'éléments à supprimer (tous de startsi non fournis).
  • item1, item2, ...: optionnel. Éléments à ajouter au tableau à partir de l' startindex.

Renvoie : Un tableau avec des éléments supprimés (tableau vide si aucun n'est supprimé)

Mutation de la matrice d'origine : Oui

Exemples:

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 ]

Autres exemples dans les exemples MDN Splice


Slice - Référence MDN - Spécification ECMA-262

Paramètres de syntaxe
array.slice([begin[, end]])

  • begin: optionnel. Index initial (par défaut 0).
    Si elle beginest négative, elle est traitée conformément "Math.max((array.length + begin), 0)"aux spécifications (exemple fourni ci-dessous) efficacement à partir de la fin de array.
  • end: optionnel. Dernier index d'extraction mais non compris (par défaut array.length). Si elle endest négative, elle est traitée conformément "Math.max((array.length + begin),0)"aux spécifications (exemple fourni ci-dessous) efficacement à partir de la fin de array.

Renvoie : Un tableau contenant les éléments extraits.

Mutate original : Non

Exemples:

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 ]

Plus d'exemples dans les exemples de tranche MDN

Comparaison des performances

Ne prenez pas cela comme une vérité absolue, car selon chaque scénario, l'un pourrait être plus performant que l'autre.
Test de performance


13

Splice et Slice sont des commandes Javascript intégrées - pas spécifiquement des commandes AngularJS. Slice renvoie les éléments du tableau depuis le "début" jusqu'à juste avant les spécificateurs "fin". Splice mute le tableau réel, démarre au «début» et conserve le nombre d'éléments spécifié. Google a beaucoup d'informations à ce sujet, il suffit de rechercher.


3
Splice supprime le nombre spécifié, puis insère tous les arguments suivants.
Josiah Keller

splice supprime un nombre donné d'éléments d'un index de départ donné, par exemple splice (4,1); supprime un élément à partir de l'indice 4 tandis que l'épissure (4,3); supprime trois éléments en commençant par l'élément à l'index 4. Ensuite, après les avoir supprimés, il renvoie les valeurs supprimées.
briancollins081

11

La splice()méthode renvoie les éléments supprimés dans un tableau. La slice()méthode renvoie le ou les éléments sélectionnés dans un tableau, sous la forme d'un nouvel objet tableau.

La splice()méthode modifie le tableau d'origine et la slice()méthode ne modifie pas le tableau d'origine.

  • Splice() La méthode peut prendre n nombre d'arguments:

    Argument 1: index, obligatoire.

    Argument 2: facultatif. Le nombre d'éléments à supprimer. S'il est défini sur 0 (zéro), aucun élément ne sera supprimé. Et s'il n'est pas passé, tous les éléments de l'index fourni seront supprimés.

    Argument 3..n: facultatif. Le ou les nouveaux éléments à ajouter au tableau.

  • slice() La méthode peut prendre 2 arguments:

    Argument 1: obligatoire. Un entier qui spécifie où commencer la sélection (le premier élément a un index de 0). Utilisez des nombres négatifs pour sélectionner à partir de la fin d'un tableau.

    Argument 2: facultatif. Un entier qui spécifie où terminer la sélection. Si omis, tous les éléments de la position de départ et jusqu'à la fin du tableau seront sélectionnés. Utilisez des nombres négatifs pour sélectionner à partir de la fin d'un tableau.


6

S LICE = Donne une partie du tableau et PAS de division du tableau d'origine

SP LICE = Donne une partie du tableau et SP lisant le tableau d'origine

Personnellement, j'ai trouvé cela plus facile à retenir, car ces 2 termes m'ont toujours confondu en tant que débutant dans le développement Web.


1
Très intelligent! Merci d'avoir partagé!
Penny Liu

4

épisser et supprimer un élément de tableau par index

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

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

entrez la description de l'image ici


3

Un autre exemple:

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

3

slice ne change pas le tableau d'origine, il renvoie un nouveau tableau mais l'épissure modifie le tableau d'origine.

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

Le deuxième argument de la méthode splice est différent de la méthode slice. Le deuxième argument dans splice représente le nombre d'éléments à supprimer et dans la tranche, il représente l'index de fin.

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 représente le dernier élément donc il commence de -3 à -1. Ci-dessus se trouvent la différence majeure entre la méthode d'épissure et de coupe.


3

La plupart des réponses sont trop verbeuses.

  • spliceet slicerenvoie le reste des éléments du tableau.
  • splicemute le tableau en cours d'utilisation avec des éléments supprimés alors que ce slicen'est pas le cas.

entrez la description de l'image ici


2

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


Veuillez fournir plus d'informations sur ce qui se passe
Manit

1

La différence entre les fonctions intégrées javascript Slice () et Splice () est que Slice renvoie l'élément supprimé mais n'a pas modifié le tableau d'origine; comme,

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

mais dans le cas de splice (), cela affecte le tableau d'origine; comme,

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

0

JavaScript Array splice (), méthode par exemple

Exemple1 par tutsmake -Supprimer 2 éléments de l'index 1

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

 arr.splice(1,2);

 console.log( arr ); 

Exemple-2 Par tutsmake - Ajouter un nouvel élément à partir de l'index 0 JavaScript

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

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

 console.log( arr );  

Example-3 par tutsmake - Ajouter et supprimer des éléments dans un tableau 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/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.