2016-01-07 21 views
1

我有一個隨機生成的數字的數組。 我想創建一個分割所有這些數字的函數。基本上,假設我有5個數字的陣列[5,7,6,8,2],我想要的輸出等於5/7/6/8/2在Javascript數組中彼此分開數字

array = [5, 7, 6, 8, 2]; 

var total = 1;  
for(var i = 0; i < array.length; i++) { 
total = array[i]/total; 
} 

return total; 

在這就是我到目前爲止,但輸出是不正確的。任何想法,我做錯了?

+0

與您的嘗試相比,輸出沒有意義。應該澄清預期的結果。 – charlietfl

回答

7

你已經基本上得到了你的數學倒退。用你的方法,你想逐步分配總數,而不是逐步分配總數。

var total = array[0]; 
for (var i = 1; i < array.length; i++) 
    total = total/array[i]; 
return total; 
+0

我試過了,但仍然無法返回正確的結果。這是因爲第一次劃分是在等於數組[0]和數組[0]本身之間進行的。任何想法如何解決它? –

+0

這段代碼從不將自己的'array [0]'分開,因爲循環從'i = 1'開始。使用你的樣本數據,這段代碼提供了一個'0.00744'的輸出是正確的('5/6/7/8/2') – CollinD

+0

哦,現在我明白了。我沒有看到你改變了var i = 1。你是對的!這是現在的作品!太棒了,謝謝你! –

-3

嘗試......

array = [5, 7, 6, 8, 2]; 
var total = array[0]; 
for(var i = 1; i < array.length; i++) { 
    total = array[i]/total; 
} 
return total; 
4

試試這個。它使用陣列的reduce方法以及es6 arrow functions,這使它成爲一個班輪。您可以使用babel將es6語法轉換爲es5。

var arr = [5, 7, 6, 8, 2]; 

arr.reduce((prev,curr) => prev/curr); 

ES5版本:

var arr = [5, 7, 6, 8, 2]; 

arr.reduce(function(prev, curr) { 
    return prev/curr; 
}); 

正如你可以看到in the docs,Array.reduce()將值的列表減少到一個值,通過列表循環,將一個回調函數將返回一個新的列表。在該回調可以訪問4個parameteres:

PREVIOUSVALUE:如果傳遞迴調函數後的參數,PREVIOUSVALUE將假設值,否則它會在數組中的第一項。

currentValue:循環中的當前值。

索引:循環中當前項目的索引。

陣列:列表

+0

我喜歡 - 下面是OP的一些文檔:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – axlj

+0

@RobG很多人都回答那。我只是提出了一個簡潔的替代解決方案。至於箭頭功能,有人可以使用轉換器轉換爲es5。我已添加指向文檔的鏈接以獲取更多解釋 – blessenm

0

那麼你搞砸了總數,你不斷分割每個新的數字與結果。你只需要翻轉'/'運算符。

array = [5, 7, 6, 8, 2]; 

var total = array[0];  
for(var i = 1; i < array.length; i++) { 
total = total/array[i]; 
} 

return total; 
+1

除了每個CollinD答案的初始值應該是'array [0]'而不是'1'。;-) – RobG