[英]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_1
和iResult_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.