Wie füge ich ein Element an einem bestimmten Index in ein Array ein?

Ich suche nach einer JavaScript-Array-Einfügemethode im Stil:

 arr.insert(index, item) 

Vorzugsweise in jQuery, aber an dieser Stelle ist jede Implementierung von Javascript erforderlich.

2294
25 февр. setze auf tags2k 25. Februar 2009-02-25 17:29 09 um 17:29 2009-02-25 17:29
@ 14 Antworten

Was Sie wollen, ist die splice Ihres eigenen Arrays.

arr.splice(index, 0, item); fügt das item am angegebenen Index in arr (zuerst werden 0 Elemente entfernt, d. h. es wird nur eingefügt).

In diesem Beispiel erstellen wir ein Array und fügen ein Element an Index 2 hinzu:

3766
25 февр. Die Antwort gibt tvanfosson am 25. Februar. 2009-02-25 17:32 09 um 17:32 2009-02-25 17:32

Sie können die Array.insert Methode folgendermaßen implementieren:

 Array.prototype.insert = function ( index, item ) { this.splice( index, 0, item ); }; 
border=0

Dann kannst du es so benutzen:

 var arr = [ 'A', 'B', 'D', 'E' ]; arr.insert(2, 'C'); // => arr == [ 'A', 'B', 'C', 'D', 'E' ] 
227
03 окт. Die Antwort gibt FrEsC 81 03 Oct. 2012-10-03 17:26 '12 um 17:26 Uhr 2012-10-03 17:26

Benutzerdefinierte insert Methoden

1. Mit einigen Argumenten und Verkettungsunterstützung

  Array.prototype.insert = function(index) { this.splice.apply(this, [index, 0].concat( Array.prototype.slice.call(arguments, 1))); return this; }; 

Es kann mehrere Elemente (wie ein nativer splice ) einfügen und unterstützt die Kette:

 ["a", "b", "c", "d"].insert(2, "X", "Y", "Z").slice(1, 6); // ["b", "X", "Y", "Z", "c"] 

2. Mit Array-Unterstützung für das Zusammenführen und Binden von Argumenten

  Array.prototype.insert = function(index) { index = Math.min(index, this.length); arguments.length > 1  this.splice.apply(this, [index, 0].concat([].pop.call(arguments)))  this.insert.apply(this, arguments); return this; }; 

Es kann Arrays aus Argumenten mit einem gegebenen Array kombinieren und unterstützt auch eine Kette:

 ["a", "b", "c", "d"].insert(2, "V", ["W", "X", "Y"], "Z").join("-"); // "abVWXYZcd" 

DEMO: http://jsfiddle.net/UPphH/

66
25 марта '13 в 20:45 2013-03-25 20:45 Die Antwort wurde von VisioN am 25. März 13 um 20:45 Uhr 2013-03-25 20:45 gegeben

Zusätzlich zum Spleißen können Sie diesen Ansatz verwenden, der das ursprüngliche Array nicht verändert, sondern ein neues Array mit dem hinzugefügten Element erstellt. Normalerweise sollten Sie Mutationen vermeiden. Ich verwende hier den Es6-Propagierungsoperator.

63
04 июля '16 в 12:18 2016-07-04 12:18 Die Antwort wird von Gaafar am 4. Juli 16 um 12:18 Uhr 2016-07-04 12:18 gegeben

Wenn Sie mehrere Elemente gleichzeitig in ein Array einfügen möchten, sehen Sie sich diese Antwort an: Die beste Methode, ein Array in einem Array in Javascript zu verbinden

Hier sind auch einige Funktionen, die beide Beispiele veranschaulichen:

 function insertAt(array, index) { var arrayToInsert = Array.prototype.splice.apply(arguments, [2]); return insertArrayAt(array, index, arrayToInsert); } function insertArrayAt(array, index, arrayToInsert) { Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert)); return array; } 

Schließlich ist hier jsFiddle, damit Sie es selbst sehen können: http://jsfiddle.net/luisperezphd/Wc8aS/

So verwenden Sie die Funktionen:

 // if you want to insert specific values whether constants or variables: insertAt(arr, 1, "x", "y", "z"); // OR if you have an array: var arrToInsert = ["x", "y", "z"]; insertArrayAt(arr, 1, arrToInsert); 
32
30 авг. Antwort von Luis Perez 30. Aug. 2012-08-30 07:37 '12 um 07:37 Uhr 2012-08-30 07:37 Uhr

Für eine korrekte Funktionsprogrammierung und den Fokus ist es wichtig, Array.prototype.insert() zu erfinden. Tatsächlich könnte das Spleißen perfekt sein, wenn ein mutiertes Array anstelle eines völlig bedeutungslosen leeren Arrays zurückgegeben wird. Also hier ist es

15
14 мая '16 в 2:22 2016-05-14 02:22 Antwort wird am 14. Mai '16 um 02:22 Uhr gegeben . 2016-05-14 02:22

In diesem Fall empfehle ich die Verwendung von reinem JavaScript . Es gibt auch keine Einfügemethode in JavaScript. Wir haben jedoch eine Methode, die eine eingebaute Array- Methode ist, die die Aufgabe für Sie erledigt. Sie wird als Splice bezeichnet .

Mal sehen, dass der Splice () ...

Die splice () -Methode ändert den Inhalt eines Arrays, indem vorhandene Elemente gelöscht und / oder neue Elemente hinzugefügt werden.

OK, stellen Sie sich vor, wir haben dieses Array unten:

 const arr = [1, 2, 3, 4, 5]; 

Wir können 3 wie folgt löschen:

 arr.splice(arr.indexOf(3), 1); 

Es wird 3 zurückgegeben, aber wenn wir arr jetzt überprüfen, haben wir:

 [1, 2, 4, 5] 

So weit so gut, aber wie können wir einem Array durch Spleißen ein neues Element hinzufügen? Lass ihn 3 in zurückkommen ...

 arr.splice(2, 0, 3); 

Mal sehen was wir gemacht haben ...

Wir verwenden erneut das Splicing , aber diesmal übergeben wir für das zweite Argument 0 , was bedeutet, dass wir das Element löschen möchten. Gleichzeitig fügen wir jedoch das dritte Argument hinzu, das im zweiten Index hinzugefügt wird.

Sie sollten wissen, was wir entfernen und gleichzeitig hinzufügen können. Jetzt können wir beispielsweise Folgendes tun:

 arr.splice(2, 2, 3); 

Dadurch werden 2 Elemente am Index 2 entfernt, dann am Index 2 3 hinzugefügt, und das Ergebnis lautet:

 [1, 2, 3, 5]; 

Dies zeigt, wie jedes Element beim Spleißen funktioniert:

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

9
25 дек. Die Antwort wird Alireza am 25. Dezember gegeben. 2017-12-25 16:04 '17 um 16:04 Uhr 2017-12-25 16:04

Das:

 var arr= ["India","China","Japan","USA"]; arr.splice(index, 0, item); 

Führt das Element in arr mit dem angegebenen index (zuerst werden 0 Elemente entfernt, d. H. Nur eingefügt).

8
24 февр. die antwort wird von hannad rehman gegeben 24. Feb. 2017-02-24 16:29 '17 um 16:29 Uhr 2017-02-24 16:29

Eine andere mögliche Lösung ist die Verwendung von Array#reduce .

5
05 апр. die antwort ist gütiger benutzer 05 Apr 2017-04-05 20:06 '17 um 20:06 2017-04-05 20:06

Auch wenn dies bereits beantwortet wurde, füge ich diese Anmerkung für einen alternativen Ansatz hinzu.

Ich wollte eine bekannte Anzahl von Elementen in einem Array an bestimmten Positionen platzieren, da sie von einem "assoziativen Array" (d. H. Einem Objekt) getrennt werden, das definitionsgemäß nicht in einer sortierten Reihenfolge garantiert ist. Ich wollte, dass das resultierende Array ein Array von Objekten ist, aber die Objekte waren in einer bestimmten Reihenfolge im Array, da das Array ihre Reihenfolge garantiert. Also habe ich es geschafft.

Zuerst das Quellobjekt, die von PostgreSQL erhaltene JSONB-Zeichenfolge. Ich wollte, dass es nach der "order" -Eigenschaft in jedem untergeordneten Objekt sortiert wird.

 var jsonb_str = '{"one": {"abbr": "", "order": 3}, "two": {"abbr": "", "order": 4}, "three": {"abbr": "", "order": 5}, "initialize": {"abbr": "init", "order": 1}, "start": {"abbr": "", "order": 2}}'; var jsonb_obj = JSON.parse(jsonb_str); 

Da die Anzahl der Knoten im Objekt bekannt ist, erstelle ich zunächst ein Array mit der angegebenen Länge:

 var obj_length = Object.keys(jsonb_obj).length; var sorted_array = new Array(obj_length); 

Versuchen Sie dann das Objekt erneut, und platzieren Sie die neu erstellten temporären Objekte ohne Sortierung an den richtigen Stellen im Array.

 for (var key of Object.keys(jsonb_obj)) { var tobj = {}; tobj[key] = jsonb_obj[key].abbr; var position = jsonb_obj[key].order - 1; sorted_array[position] = tobj; } console.dir(sorted_array); 
5
04 дек. die antwort ist ville 04 dez. 2015-12-04 21:36 '15 um 21:36 2015-12-04 21:36

Fügen Sie einen einzelnen Artikel an einem bestimmten Index hinzu

 //Append at specific position(here at index 1) arrName.splice(1, 0,'newName1'); //1: index number, 0: number of element to remove, newName1: new element //Append at specific position (here at index 3) arrName[3] = 'newName1'; 

Fügen Sie mehrere Elemente zu einem bestimmten Index hinzu

 //Append from index number 1 arrName.splice(1, 0,'newElemenet1', 'newElemenet2', 'newElemenet3'); //1: index number from where append start, //0: number of element to remove, //newElemenet1,2,3: new elements 
4
28 июня '18 в 22:13 2018-06-28 22:13 Die Antwort gibt Srikrushna Pal am 28. Juni 1818 um 22:13 Uhr 2018-06-28 22:13

Ich habe es ausprobiert und es funktioniert gut!

 var initialArr = ["India","China","Japan","USA"]; initialArr.splice(index, 0, item); 

Der Index ist die Position, an der Sie ein Element einfügen oder löschen möchten. 0, d.h. Der zweite Parameter bestimmt die Anzahl der Elemente aus dem Objekt, die gelöscht werden sollen. Dies sind die neuen Datensätze, die Sie im Array erstellen möchten. Es kann eine oder mehrere sein.

 initialArr.splice(2, 0, "Nigeria"); initialArr.splice(2, 0, "Australia","UK"); 
2
08 марта '17 в 9:35 2017-03-08 09:35 Die Antwort wird von Pawan 08. März 17 um 09:35 2017-03-08 09:35 gegeben

Jeder, der Probleme damit hat und alle oben genannten Optionen ausprobiert hat, hat es nie bekommen. Ich teile meine Entscheidung, es ist zu beachten, dass Sie die Eigenschaften Ihres Objekts und Arrays nicht explizit angeben möchten.

 function isIdentical(left, right){ return JSON.stringify(left) === JSON.stringify(right); } function contains(array, obj){ let count = 0; array.map((cur) => { if(this.isIdentical(cur, obj)) count++; }); return count > 0; } 

Es ist eine Kombination aus Iteration eines Arrays von Referenzen und einem Vergleich mit dem Objekt, das Sie überprüfen möchten, konvertiert beide in einen String und wiederholt es, wenn es passt. Dann kannst du einfach zählen. Dies kann verbessert werden, aber hier habe ich mich niedergelassen. Hoffe das hilft.

1
06 дек. Die Antwort wird von Clyde 06 Dez gegeben. 2018-12-06 07:26 18 am 07.26 Uhr 2018-12-06 07:26

Gewinne mit der Reduktionsmethode folgendermaßen einnehmen:

 function insert(arr, val, index) { return index >= arr.length ? arr.concat(val) : arr.reduce((prev, x, i) => prev.concat(i === index ? [val, x] : x), []); } 

Auf diese Weise können wir auf diese Weise ein neues Array zurückgeben (dies ist ein cooler funktionaler Weg - viel besser als Push oder Splice), wobei das Element in den Index eingefügt wird. Wenn der Index größer als die Länge des Arrays ist, wird es am Ende eingefügt.

0
12 янв. Antwort von alejoko 12. Januar 2019-01-12 20:04 '19 um 20:04 Uhr 2019-01-12 20:04

Andere Fragen zu Etiketten oder Eine Frage stellen