Frage Löschen von Array-Elementen in JavaScript - delete vs splice


Was ist der Unterschied zwischen der Verwendung? das delete Operator auf dem Array-Element im Gegensatz zu verwenden das Array.splice Methode?

Beispielsweise:

myArray = ['a', 'b', 'c', 'd'];

delete myArray[1];
//  or
myArray.splice (1, 1);

Warum habe ich sogar die Spleißmethode, wenn ich Array-Elemente wie ich mit Objekten löschen kann?


1173
2018-02-01 11:11


Ursprung


Antworten:


delete löscht die Objekteigenschaft, aber wird das Array nicht neu indizieren oder seine Länge aktualisieren. Dies lässt es so aussehen, als wäre es nicht definiert:

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> delete myArray[0]
  true
> myArray[0]
  undefined

Beachten Sie, dass es nicht auf den Wert festgelegt ist undefinedVielmehr wird die Eigenschaft aus dem Array entfernt, um es zu machen erscheinen nicht definiert. Die Chrome-Entwicklertools machen diese Unterscheidung beim Drucken deutlich empty beim Protokollieren des Arrays.

> myArray[0]
  undefined
> myArray
  [empty, "b", "c", "d"]

myArray.splice(start, deleteCount) entfernt das Element tatsächlich, indexiert das Array neu und ändert seine Länge.

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> myArray.splice(0, 2)
  ["a", "b"]
> myArray
  ["c", "d"]

1539
2018-02-01 11:16



Array.remove () Methode

John Resig, Schöpfer von jQuery erstellt ein sehr praktisch Array.remove Methode, die ich immer in meinen Projekten verwende.

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

und hier sind einige Beispiele, wie es verwendet werden könnte:

// Remove the second item from the array
array.remove(1);
// Remove the second-to-last item from the array
array.remove(-2);
// Remove the second and third items from the array
array.remove(1,2);
// Remove the last and second-to-last items from the array
array.remove(-2,-1);

Johns Webseite


321
2018-03-22 00:51



Da delete nur das Objekt aus dem Element im Array entfernt, ändert sich die Länge des Arrays nicht. Splice entfernt das Objekt und verkürzt das Array.

Der folgende Code zeigt "a", "b", "undefined", "d"

myArray = ['a', 'b', 'c', 'd']; delete myArray[2];

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

Während dies "a", "b", "d" anzeigen

myArray = ['a', 'b', 'c', 'd']; myArray.splice(2,1);

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

95
2018-02-01 11:13



Ich stolperte über diese Frage, während ich versuchte zu verstehen, wie jedes Vorkommen eines Elements aus einem Array entfernt werden kann. Hier ist ein Vergleich von splice und delete zum Entfernen aller 'c' von dem items Array.

var items = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];

while (items.indexOf('c') !== -1) {
  items.splice(items.indexOf('c'), 1);
}

console.log(items); // ["a", "b", "d", "a", "b", "d"]

items = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];

while (items.indexOf('c') !== -1) {
  delete items[items.indexOf('c')];
}

console.log(items); // ["a", "b", undefined, "d", "a", "b", undefined, "d"]
​

60
2018-05-09 13:25



Von  Core JavaScript 1.5 Referenz> Operatoren> Spezielle Operatoren> delete Operator :

Wenn Sie ein Array-Element löschen,   Array-Länge ist nicht betroffen. Zum   Wenn Sie beispielsweise [3] löschen, ist a [4]   immer noch ein [4] und ein [3] ist undefiniert. Dies   gilt auch, wenn Sie die letzte löschen   Element des Arrays (löschen   a [a.Länge-1]).


13
2018-02-01 11:16



splice wird mit numerischen Indizes arbeiten.

wohingegen delete kann gegen andere Arten von Indizes verwendet werden ..

Beispiel:

delete myArray['text1'];

9
2018-01-11 07:52



Es ist wahrscheinlich auch erwähnenswert, dass Spleiß nur auf Arrays funktioniert. (Objekteigenschaften können nicht darauf verlassen werden, dass sie einer konsistenten Reihenfolge folgen.)

Um das Schlüssel-Wert-Paar von einem Objekt zu entfernen, ist Löschen tatsächlich das, was Sie wollen:

delete myObj.propName;     // , or:
delete myObj["propName"];  // Equivalent.

9
2017-08-01 20:11



löschen verhält sich wie eine nicht reale Weltsituation, es ist einfach entfernt das Element, aber die Array-Länge bleibt gleich:

Beispiel vom Knoten-Terminal:

> var arr = ["a","b","c","d"];
> delete arr[2]
true
> arr
[ 'a', 'b', , 'd', 'e' ]

Hier ist eine Funktion um ein Element eines Arrays nach Index zu entfernen Scheibe()Es nimmt den arr als erstes Argument und den Index des Mitglieds, das Sie löschen wollen, als zweites Argument. Wie Sie sehen, löscht es tatsächlich das Mitglied des Arrays und reduziert die Array-Länge um 1

function(arr,arrIndex){
    return arr.slice(0,arrIndex).concat(arr.slice(arrIndex + 1));
}

Die obige Funktion nimmt alle Mitglieder bis zum Index und alle Mitglieder nach dem Index und verkettet sie zusammen und gibt das Ergebnis zurück.

Hier ist ein Beispiel, das die obige Funktion als Knotenmodul verwendet. Das Terminal wird nützlich sein:

> var arr = ["a","b","c","d"]
> arr
[ 'a', 'b', 'c', 'd' ]
> arr.length
4 
> var arrayRemoveIndex = require("./lib/array_remove_index");
> var newArray = arrayRemoveIndex(arr,arr.indexOf('c'))
> newArray
[ 'a', 'b', 'd' ] // c ya later
> newArray.length
3

Bitte beachten Sie, dass dies nicht mit einem Array mit Duplikaten funktioniert, da indexOf ("c") nur das erste Vorkommen erhält und nur das erste "c" spleißt und entfernt.


7
2017-07-20 02:20