Was ist der Sinn von .slice(0) hier?

Lesezeit: 1 Minute

Benutzer-Avatar
mVChr

Ich studierte die jQuery-Quelle, als ich dies fand (v1.5, Zeile 2295):

namespace = new RegExp("(^|\\.)" +
  jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");

Meine Frage ist, warum verwenden slice(0) hier?

sort() ändert das Array, auf dem es aufgerufen wird – und es ist nicht sehr schön, Dinge zu mutieren, auf die sich anderer Code verlassen könnte.

slice() gibt immer ein neues Array zurück – das von zurückgegebene Array slice(0) ist identisch mit der Eingabe, was im Grunde bedeutet, dass es eine billige Möglichkeit ist, ein Array zu duplizieren.

  • @ide Antwort ist präziser: “wird auch verwendet, um Array-ähnliche Objekte in Arrays umzuwandeln”

    – Michael Laffargue

    9. März 2016 um 9:47 Uhr

Benutzer-Avatar
ide

arr.slice(0) erstellt eine Kopie des ursprünglichen Arrays, indem ein Slice vom Element bei Index 0 bis zum letzten Element genommen wird.

Es wurde auch verwendet, um Array-ähnliche Objekte in Arrays umzuwandeln. Zum Beispiel ein DOM NodeList (wird von mehreren DOM-Methoden zurückgegeben, z getElementsByTagName) ist kein Array, aber ein Array-ähnliches Objekt mit a length -Feld und ist in JavaScript indexierbar. Um es in ein Array umzuwandeln, verwendete man oft:

var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)

Jetzt wird die Spread-Syntax von ES2015 verwendet, um iterierbare Objekte zu konvertieren, einschließlich NodeList und HTMLCollectionzu Arrays:

const anchorArray = [...document.getElementsByTagName('a')]

  • Slice ist für den von document.getElementsByName (in Firefox 3.16) zurückgegebenen Wert „undefiniert“. Ich habe verwendet: var iiNodes=[], tmp = editorDocument.getElementsByName(“intInfo”); for (var ii=0; ii

    – Ribos

    31. Mai 2011 um 17:42 Uhr


  • HTMLCollection.slice ist undefiniert, aber Array.slice existiert, daher die [].slice.call business.

    – ide

    4. Juni 2011 um 1:20 Uhr

  • In einem Beispiel sah ich, const nav = Array.prototype.slice.call(document.querySelectorAll('.nav'), 0); warum ist die Verwendung von Array.prototype besser als []?

    – kchetan

    23. Januar 2020 um 21:00 Uhr

Benutzer-Avatar
Abhi

slice(0) erstellt ein neues Array, das mit dem ursprünglichen Array identisch ist. Oft möchten Sie Ihr ursprüngliches Array beibehalten und ein neues erstellen.

Wenn du benutzt slice(1)wird ein anderes Array erstellt, beginnend bei Indexposition 1.

Ähnliches gilt auch für Saiten.

slice(0) ermöglicht es Ihnen, ein Array des vorhandenen Arrays zurückzugeben, auf das Sie verweisen, in diesem Fall Namespaces.

Zusätzlich zu dem, was @Anon gesagt hat:

Das slice() -Methode wählt die Elemente aus, beginnend mit dem angegebenen Startargument, und endet mit dem angegebenen Endargument, schließt es jedoch nicht ein.

Beispiel 1:

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3);

Das Ergebnis von Zitrusfrüchten wird sein:

Orange,Lemon

Beispiel2:

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(-3, -1);

Das Ergebnis von Zitrusfrüchten wird sein:

Lemon,Apple

Weitere Informationen finden Sie hier.

  • Nein, das Ergebnis wird sein ["Lemon", "Apple"] um genau zu sein. Und wir alle wissen was slice() tut. Stackoverflow ist nicht zum Nachwürgen von Dokumentation gedacht. Die Frage ist, was der Sinn von slice(0) ist. Was in diesem Zusammenhang deine Frage überhaupt nicht beantwortet.

    – zfj3ub94rf576hc4eegm

    2. Januar 2018 um 16:34 Uhr

  • Nein, das Ergebnis wird sein ["Lemon", "Apple"] um genau zu sein. Und wir alle wissen was slice() tut. Stackoverflow ist nicht zum Nachwürgen von Dokumentation gedacht. Die Frage ist, was der Sinn von slice(0) ist. Was in diesem Zusammenhang deine Frage überhaupt nicht beantwortet.

    – zfj3ub94rf576hc4eegm

    2. Januar 2018 um 16:34 Uhr

1101250cookie-checkWas ist der Sinn von .slice(0) hier?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy