2016-06-15 7 views
-1

Ich habe folgende Funktion. Es wird erwartet, dass Element in Array an Position Nr. eingefügt wird. Wenn Element eingefügt wird, wird das letzte Element des Arrays gelöscht, d. H. Array muss immer die gleiche Länge haben. Array wird aus der String-Sitzungsvariablen itemstr mit split() übernommen. Das allererste Element des Arrays soll nie geändert werden, daher rufe ich diese Funktion immer mit n===1 auf. Das Problem ist, dass die Funktion nicht im Sinne von splice() eingefügt wird. Es ändert sich einfach den Wert des Elements #noJS: Element in Array einfügen

function insert_into_array(no, item) 
    { 
     var itemarr = sessionStorage.itemstr.split(','); 

     if ((no < itemarr.length) && (no > 0)) { 
      var i; 
      for (i === itemarr.length - 1; i > no; i--) { 
       itemarr[i] = itemarr[i - 1]; 
      } 
      itemarr[no] = item; 
      sessionStorage.itemstr = itemarr.toString(); 
     } 
    } 
+2

Gibt es einen Grund, warum Sie 'Spleiß' vermeiden? – Paulpro

+0

Wenn ein Element eingefügt wird, wird das letzte Element des Arrays gelöscht. Hat das Array eine feste Länge? – brk

+0

'===' anstelle von '=' – 1983

Antwort

1

In dieser Zeile Sie einen Typ haben:

for (i === itemarr.length - 1; i > no; i--) { 

sollte es tatsächlich: i = itemarr.length - 1 und nicht i === itemarr.length - 1

+0

Danke !! Das ist es –

0

nicht bekommen, was Sie genau wollen .. Was ich verstehe, ist, dass Sie Element an der Position, die durch no definiert ist, einfügen und letztes Element entfernen müssen. Sie können versuchen, diese im Fall ..

function insert_into_array(no, item) 
     { 
      var itemarr = sessionStorage.itemstr.split(','); 

      if ((no < itemarr.length) && (no > 0)) { 
       itemarr .splice(no, 0, item); //Insert element at position defined by #no 
       itemarr .pop(); //removes last element 
       } 
       sessionStorage.itemstr = itemarr.toString(); 

     } 
-1

Wie ich von der Frage verstanden, eine Variable auf ein Array an einer festen Position eingefügt werden sollen, und vorheriger Inhalt an dieser Position müssen verschoben und letzte Array-Wert Notwendigkeit entfernt werden.

Verwenden Sie einfach arr.pop(), um das letzte Element zu entfernen, und verwenden Sie eine for-Schleife, um eine Position nach rechts zu verschieben. mit jQuery wird hier einfacher sein.

+0

Ich werde mein Downvote entfernen, wenn Sie eine gültige Erklärung geben können, wie Sie dies mit jQuery vereinfachen können. – Paulpro

+0

Ich habe etwas ähnliches mit der jQuery slice() Methode gemacht. Deshalb habe ich vorgeschlagen, jQuery, bitte korrigieren Sie mich, wenn ich falsch liege. Danke –

+0

[jQuery Slice] (https://api.jquery.com/slice/) funktioniert auf jQuery-Sammlungen, nicht Arrays. Es ist nicht verwendbar für das OP-Array, das ein Array von Strings ist. Glücklicherweise haben gewöhnliche Javascript-Arrays [slice] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) und [splice] (https://developer.mozilla.org/) de/docs/Web/JavaScript/Referenz/Global_Objects/Array/splice) bereits. – Paulpro

0

Culprit für Ihre Funktion ist folgende Zeile

for (i === itemarr.length - 1; i > no; i--) 

hier will ich den da dies ein Vergleich (===) und nicht die Zuweisung (=) nicht definierten Wert zugewiesen werden. Somit wird i (undefiniert)> nein immer falsch sein, also keine Schleifenausführung mehr. Ersetzen Sie einfach den Vergleich mit der Zuweisung

for (i = itemarr.length - 1; i > no; i--)