1451 Stimmen

Löschen von Array-Elementen in JavaScript - Löschen vs. Spleißen

Was ist der Unterschied zwischen der Verwendung von die delete Betreiber auf das Array-Element im Gegensatz zur Verwendung von die Array.splice Methode ?

Zum Beispiel:

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

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

Warum überhaupt die Splice-Methode, wenn ich Array-Elemente löschen kann, wie ich mit Objekten kann?

4 Stimmen

Para .splice in Schleifen, werfen Sie einen Blick auf diese Frage: Löschen aus Array in Javascript .

6 Stimmen

@andynormancx Ja, aber diese Antwort wurde erst einen Tag später gepostet und erhielt so viele Stimmen - ich würde sagen, sie ist besser geschrieben, das muss es sein.

0 Stimmen

@andynormancx - Es scheint kein exaktes Duplikat zu sein. Die Frage, die Sie verlinkt haben, fragt im Grunde, warum das Löschen eines Elements aus einem Array (wodurch es spärlich wird) dessen Länge nicht verringert. Diese Frage fragt nach den Unterschieden zwischen delete y Array.prototype.splice .

12voto

serv-inc Punkte 32204

Wie bereits mehrfach erwähnt, ist die Verwendung von splice() scheint perfekt zu passen. Dokumentation bei Mozilla:

El splice() Methode ändert den Inhalt eines Arrays, indem bestehende Elemente entfernt und/oder neue Elemente hinzugefügt werden.

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];

myFish.splice(2, 0, 'drum'); 
// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]

myFish.splice(2, 1); 
// myFish is ["angel", "clown", "mandarin", "sturgeon"]

Syntax

array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)

Parameter

Start

Index, bei dem die Änderung des Arrays beginnen soll. Ist dieser größer als die Länge des Arrays, wird der tatsächliche Startindex auf die Länge des Arrays gesetzt. Ist er negativ, beginnt er so viele Elemente vom Ende entfernt.

deleteCount

Eine ganze Zahl, die die Anzahl der zu entfernenden alten Array-Elemente angibt. Wenn deleteCount 0 ist, werden keine Elemente entfernt. In diesem Fall sollten Sie mindestens ein neues Element angeben. Ist deleteCount größer als die Anzahl der im Array verbliebenen Elemente ab start, werden alle Elemente bis zum Ende des Arrays gelöscht.

Wenn deleteCount weggelassen wird, ist deleteCount gleich (arr.length - start).

item1, item2, ...

Die Elemente, die dem Array hinzugefügt werden sollen, beginnend mit dem Startindex. Wenn Sie keine Elemente angeben, splice() werden nur Elemente aus dem Array entfernt.

Rückgabewert

Ein Array, das die gelöschten Elemente enthält. Wenn nur ein Element entfernt wird, wird ein Array mit einem Element zurückgegeben. Wenn keine Elemente entfernt werden, wird ein leeres Array zurückgegeben.

[...]

10voto

Gopal Punkte 145

splice funktioniert mit numerischen Indizes.

während delete kann gegen andere Arten von Indizes verwendet werden..

Beispiel:

delete myArray['text1'];

10 Stimmen

Wenn Sie "jede andere Art von Indizes" sagen, sprechen Sie nicht mehr von Arrays, sondern von Objekten, und das ist es, wonach der Auftraggeber fragt.

2 Stimmen

@YiJiang: Arrays sind Objekte. Indizes sind Eigenschaften. Es gibt keinen Unterschied.

0 Stimmen

@Bergi: arr[2] ist das dritte Element des Arrays arr , während arr['x'] ist eine Eigenschaft x des Objekts. Bei der tatsächlichen Verwendung macht das keinen großen Unterschied, aber intern werden sie unterschiedlich gespeichert.

9voto

jtrick Punkte 1311

Es ist wahrscheinlich auch erwähnenswert, dass Splice nur bei Arrays funktioniert. (Bei Objekteigenschaften kann man sich nicht darauf verlassen, dass sie einer konsistenten Reihenfolge folgen).

Um das Schlüssel-Wert-Paar aus einem Objekt zu entfernen, ist delete das Richtige für Sie:

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

0 Stimmen

Delete ordnet die Array-Schlüssel nicht neu an, so dass: var arr = [1,2,3,4,5]; delete arr[3]; for (var i = 0; i <= arr.length; i++) console.log(arr[i]); zu unerwarteten Ergebnissen führen wird.

0 Stimmen

Das ist wahr. Wenn Sie also nicht ein undefiniertes Element an dieser Stelle hinterlassen wollen, verwenden Sie NICHT delete für die Schlüssel eines Arrays! Ich habe diesen Kommentar ursprünglich hinzugefügt, um einen Verweis auf die korrekte Verwendung von delete aufzunehmen.

0 Stimmen

Aber warum führt das Löschen zu einem unerwarteten Ergebnis?

9voto

Ashish Yadav Punkte 2773

löschen Vs spleißen

wenn Sie ein Element aus einem Array löschen

var arr = [1,2,3,4]; delete arr[2]; //result [1, 2, 3:, 4]
console.log(arr)

wenn Sie spleißen

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

im Falle von löschen die Element wird gelöscht aber die Index bleibt leer

während im Falle von Spleiß Element wird gelöscht und das der Index der übrigen Elemente wird entsprechend reduziert

7voto

underthecode Punkte 116

Der Unterschied wird deutlich, wenn man die Länge der einzelnen Arrays nach der delete Betreiber und splice() Methode angewendet werden. Zum Beispiel:

Löschoperator

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
delete trees[3];

console.log(trees); // ["redwood", "bay", "cedar", empty, "maple"]
console.log(trees.length); // 5

El delete Operator entfernt das Element aus dem Array, aber der "Platzhalter" des Elements bleibt bestehen. oak wurde entfernt, nimmt aber immer noch Platz im Array ein. Aus diesem Grund bleibt die Länge des Feldes 5.

splice()-Methode

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
trees.splice(3,1);

console.log(trees); // ["redwood", "bay", "cedar", "maple"]
console.log(trees.length); // 4

El splice() Methode entfernt den Zielwert vollständig y auch den "Platzhalter". oak wurde entfernt, ebenso wie der Platz, den es im Array belegte. Die Länge des Arrays beträgt nun 4.

0 Stimmen

Beste Antwort hier. unabhängig von Leistung oder jede andere esoterische Diskussion, löschen und Spleißen sind NICHT das gleiche. wenn Sie ein Element aus dem Array entfernt haben müssen, wobei die Array-Länge die Anzahl der tatsächlichen Elemente widerspiegelt, haben Sie nur die Wahl zwischen den beiden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X