簡體   English   中英

Javascript:同時乘以動態大小的數組值

[英]Javascript: Multiplying dynamically sized array values simultaneously

我有一個動態大小的數組,看起來像這樣:

var myArray = [0.10,0.12,0.08,0.08];

該數組可以具有比上面更多或更少的值。

目的是將它們插入以下公式:

var iFormula = 1 - ((1 - value1)*(1 - value2)*(1 - value3)* ... (1 - valuen))

我嘗試了以下for循環:

for(var i = 0; i < myArray .length; i++) {

    iResult = iResult * (1 - myArray[i])
};

然后從1中減去iResult,但是可以想象,執行上述for循環與計算iFormula並不相同。 例如,如果我將兩個0.08值組合在一起以創建以下數組,請使用問題頂部的數組:

var myArray = [0.10,0.12,0.16];

以下兩個方程使用相同的有效數,但產生兩個不同的結果:

var iResult_1 = 1 - ((1 - 0.10)*(1 - 0.12)*(1 - 0.08)*(1 - 0.08)); // 0.3297
var iResult_2 = 1 - ((1 - 0.10)*(1 - 0.12)*(1 - 0.16));            // 0.3347

由於數組是動態調整大小的,所以我不知道當數組到達代碼的特定部分時它將有多少個值。 因此,我無法將公式硬編碼為:

var iFormula = 1 - ((1 - myArray[0])*(1 - myArray[1])*(1 - myArray[2])

有什么想法可以構造這個嗎? 有做這種事情的更好的方法嗎?

嘗試這個

iResult =1;
for(var i = 0; i < myArray .length; i++) {

    iResult = iResult * (1 - myArray[i])
};
iResult = 1 - iResult ;

您需要使用myArray[i]訪問數組元素。 並確保在循環之前正確初始化iResult

 var myArray = [0.10,0.12,0.08,0.08]; var value1 = myArray[0], value2 = myArray[1], value3 = myArray[2], value4 = myArray[3]; var iFormula = 1 - ((1 - value1)*(1 - value2)*(1 - value3)* (1 - value4)); document.getElementById('iFormula').innerHTML = iFormula; var iResult = 1; for(var i = 0; i < myArray.length; i++) { iResult = iResult * (1 - myArray[i]) }; iResult = 1 - iResult; document.getElementById('iResult').innerHTML = iResult; 
 <div>iFormula = <span id="iFormula"></span></div> <div>iResult = <span id="iResult"></span></div> 

您基於for循環的算法就可以了。

我只是想知道您如何期望iResult_1iResult_2相等。 這是我荒謬的示范:

(1 - 1) !== (1 - 0.5) * (1 - 0.5)
// 0 !== 0.25

關於以更好的方式進行此計算的方式,這是我基於Array.prototype.reduce建議:

 function calculate(arr) { return 1 - arr.reduce(function(res, cur) { return res * (1 - cur); }, 1); } document.write(calculate([0.10, 0.12, 0.08, 0.08])); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM