Kann gerade Zahlen aus meinem Array nicht löschen

7

Ich versuche alle geraden Zahlen aus dem Array zu löschen, aber es löscht nicht alle. nicht sicher, warum

%Vor%

console.log(arr); gibt dies - [3, 45, 7, 56, 345] statt dessen [3, 45, 7, 345]

Irgendwelche Ideen?

    
user3566643 15.08.2014, 00:06
quelle

5 Antworten

7

Ja, denn wenn Sie ein Element aus einem Array spleißen, ändert sich die Länge des Arrays. Probieren Sie das -

%Vor%     
Ishita 15.08.2014, 00:07
quelle
6

Wenn du 88 löschst, bewegt sich das folgende 56 um eine Position nach oben, und deine Schleife überspringt es (es tut nur i++ ).

Sie müssen vorsichtig sein, wenn Sie ein Array aktualisieren, während Sie darüber iterieren.

Sie könnten das Array in diesem Fall rückwärts durchlaufen (beginnen Sie am Ende, machen Sie i-- ). Abhängig davon, wie Spleiß implementiert wird, könnte dies sogar ein bisschen schneller sein (möglicherweise werden weniger Array-Elemente kopiert).

    
Thilo 15.08.2014 00:08
quelle
6

Die Länge Ihres Arrays ändert sich, wenn Sie Elemente daraus löschen.

Ich würde vorschlagen, Array.prototype.filter zu verwenden dies (was leicht für IE & lt; = 8 shimmed ist):

%Vor%     
Paulpro 15.08.2014 00:18
quelle
5

Sie durchlaufen Ihr Array über i, das jedes Mal inkrementiert wird. Nachdem es 88 erreicht hat, spleißt es es aus und erhöht immer noch das Array, welches die 56 überspringt, das nächste wird sich auf 34 beziehen.

Sie müssen entweder nicht i erhöhen, wenn Sie spleißen, oder wenn Sie spleißen, einfach i -;

    
RoneRackal 15.08.2014 00:09
quelle
4
%Vor%     
folibis 15.08.2014 00:19
quelle

Tags und Links