Javascript:同时乘以动态大小的数组值

Javascript:同时乘以动态大小的数组值,javascript,arrays,Javascript,Arrays,我有一个动态大小的数组,看起来像这样: 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

我有一个动态大小的数组,看起来像这样:

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])
};
以下两个等式使用相同的有效数,但产生两个不同的结果:

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 ;
iResult=1;
for(var i=0;i
您需要使用
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-值1)*(1-值2)*(1-值3)*(1-值4));
document.getElementById('iFormula')。innerHTML=iFormula;
var-iResult=1;
对于(var i=0;i
iFormula=

iResult=
基于
for
循环的算法正常

我只是想知道你怎么期望
iResult_1
iResult_2
相等。以下是我荒谬的论证:

(1 - 1) !== (1 - 0.5) * (1 - 0.5)
// 0 !== 0.25
关于如何更好地进行计算,以下是我的建议:

函数计算(arr){
返回1-arr.reduce(函数(res,cur){
返回res*(1-当前);
}, 1);
}

编写(计算([0.10,0.12,0.08,0.08])不,我无法想象。
for
循环应能完美工作。在循环之前,您是否将
iResult
初始化为
1
?您是否忘记了高中代数<代码>(1-x)*(1-x)
不等于
(1-2x)
。这等于
(1-2x+x^2)
请对您的答案进行解释。他只需在循环之前初始化iresult的值!谢谢你的回复!感谢回复和提示减少功能,非常方便!
(1 - 1) !== (1 - 0.5) * (1 - 0.5)
// 0 !== 0.25