2017-07-07 73 views
0

我應該使用while循環來遍歷這個數組,並將每個項目乘以2.當我嘗試運行它時,頁面會一直保持加載....我錯過了什麼?謝謝。穿越陣列Javascript

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

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

console.log(prices); 
+3

'i'是'0'在你的循環的開始,而'0' *什麼是'0'。 – joews

+2

使用調試器並考慮您需要做什麼以及您實際做了什麼。逐步完成該循環的每次迭代,並注意您對「i」和「i」代表的內容。提示,是我的你的指數還是你的價值? – scrappedcola

+0

讀取代碼輸出。你是說在數組的索引中取值並將其增加1。之後,你說增加值爲一段時間,並乘以兩。你不會像你的描述所說的那樣將數組翻倍。 – epascarello

回答

5

你換增量:

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

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

 
console.log(prices);

+0

你解決了我的問題?任何方式,你可以幫助我理解爲什麼我們這樣的格式? –

+0

問題出在你初始化爲0並在每次迭代時乘以2,總是導致0,所以這就是爲什麼你進入了一個無限循環。將i遞增0(在每次迭代時增加1)會改變它的值,並在我到達數組長度時停止循環 - 1. –

+0

問題真的是那個開關。你把我乘以2,並把價格[i]增加1,當你應該增加1並且把價格[i]乘以2 –

-1

正如其他人所指出的那樣,你必須在方式邏輯錯誤您所計算的更新價格。你正在乘以迭代器而不是價格。

ES5解決方案。

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

 
console.log(updatedPrices); 
 

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

ES6溶液。

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

 
console.log(updatedPrices); 
 

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