2017-07-07 4 views
0

Ich soll eine while-Schleife verwenden, um dieses Array durchqueren und jedes Element mit 2 multiplizieren. Die Seite wird nur für immer geladen, wenn ich versuche, es auszuführen .... Was fehlt mir? Vielen Dank.Traversing ein Array Javascript

var prices = [4, 5, 8, 10]; 

var i = 0; 
while (i < prices.length){ 
    prices[i]++; 
    i*=2; 
} 

console.log(prices); 
+3

'I' '0' am Anfang der Schleife, und '0' * etwas '0' ist. – joews

+2

Verwenden Sie einen Debugger und überlegen Sie, was Sie tun müssen und was Sie tatsächlich tun. Gehen Sie jede Iteration dieser Schleife durch und achten Sie darauf, was Sie mit "i" machen und was "i" darstellt. Tipp, ist "ich" dein Index oder dein Wert? – scrappedcola

+0

Lesen Sie die Codeauslastung. Sie sagen, nehmen Sie den Wert im Index des Arrays und erhöhen Sie es um eins. Danach sagen Sie, nehmen Sie den Inkrementwert für die while und multiplizieren Sie es mit zwei. du verdoppelst NICHT das Array wie deine Beschreibung sagt. – epascarello

Antwort

5

Sie tauschte die einzelnen Schritte:

var prices = [4, 5, 8, 10]; 
 

 
var i = 0; 
 
while (i < prices.length){ 
 
    prices[i] *= 2; 
 
    i++; 
 
} 
 

 
console.log(prices);

+0

Sie haben mein Problem behoben? Kannst du mir irgendwie helfen zu verstehen, warum wir so formatieren? –

+0

Das Problem lag daran, dass Sie bei jeder Iteration i als 0 initialisiert und mit 2 multipliziert haben, was immer zu 0 führt. Aus diesem Grund haben Sie eine Endlosschleife eingegeben. Inkrementieren von i durch Null (Hinzufügen von 1 bei jeder Iteration) ändert seinen Wert und macht die Schleife stoppt, wenn ich die Länge des Arrays erreicht - 1. –

+0

Das Problem war wirklich, dass Schalter. Du hast i mit 2 multipliziert und die Preise [i] um 1 erhöht, wenn du i um 1 erhöhen und die Preise [i] um 2 –

-1

Wie andere haben darauf hingewiesen, Sie einen logischen Fehler in der Art und Weise haben Sie die aktualisierten Preise zu berechnen. Sie multiplizieren den Iterator und nicht den Preis.

ES5-Lösung.

var prices = [4, 5, 8, 10]; 
 
var updatedPrices = prices.map(function(item) { 
 
    return item *= 2; 
 
}); 
 

 
console.log(updatedPrices); 
 

 
/** 
 
[ 
 
    8, 
 
    10, 
 
    16, 
 
    20 
 
] 
 
*/

ES6 Lösung.

const prices = [4, 5, 8, 10]; 
 
const updatedPrices = prices.map(item => item *= 2); 
 

 
console.log(updatedPrices); 
 

 
/** 
 
[ 
 
    8, 
 
    10, 
 
    16, 
 
    20 
 
] 
 
*/