在减去和添加数组项之间交替

时间:2018-03-09 21:08:28

标签: javascript pi

我尝试使用Gregory-Leibniz series创建计算PI的公式。我已经创建了一个for循环,用各个值填充一个新数组,但是我需要一种方法然后在减去和添加每个数组项之间交替,然后吐出结果数。基本上,我需要达到这样的目的:

(4/1) - (4/3)+(4/5) - (4/7)+(4/9) - (4/11)+(4/13) - (4/15)

以下for循环正确填充新数组:

var arrLimit = 39; 
var newArray = [];

for(i = 1; i <= arrLimit; i += 2) {     
    newArray.push(4/i);
}

此时我卡住了。我需要一些方法来获取newArray并在减去和添加值之间交替,然后生成最终数字。

6 个答案:

答案 0 :(得分:2)

您可以使用reduce对数组求和,然后根据数组的索引判断* = - 1或* = 1.

代码如下:

//Test Case 1
var arrLimit = 39; 
var newArray = [];

for(i = 1; i <= arrLimit; i += 2) {     
    newArray.push(4/i);
}

console.log(newArray.reduce(function(pre, cur, currentIndex){
  return pre+cur*(currentIndex%2 ? -1 : 1);
  }, 0));

//Test Case 2
arrLimit = 11139; 
newArray = [];
for(i = 1; i <= arrLimit; i += 2) {     
    newArray.push(4/i);
}
console.log(newArray.reduce(function(pre, cur, currentIndex){
  return pre+cur*(currentIndex%2 ? -1 : 1);
  }, 0));

答案 1 :(得分:0)

保留一个额外的变量isNeg = true。在循环的每次迭代中,只需将其与isNeg = !isNeg;交替。

var arrLimit = 39; 
var newArray = [];
var isNeg = false;

for(i = 1; i <= arrLimit; i += 2) {     
    isNeg = !isNeg;
    var val = 4/i;
    if (isNeg) {
        val *= -1;
    }
    newArray.push(val);
}

您还可以为变量指定1,并且每次执行翻转时将其乘以-1:

var arrLimit = 39; 
var newArray = [];
var factor = 1;

for(i = 1; i <= arrLimit; i += 2) {     
    factor *= -1;
    var val = factor * 4 / i;
    newArray.push(val);
}

我个人赞成第二种方法,但两种方法都很好。

答案 2 :(得分:0)

您可以添加额外的变量。如果你想要,你可以在同一时间总和。

  var arrLimit = 39; 
  var newArray = [];
  var a=-1
  var sum =0
  for(i = 1; i <= arrLimit; i += 2) { 
      a*=-1;
      newArray.push(a*4/i);
      sum+=a*4/i
  }

答案 3 :(得分:0)

  

我需要一些方法来获取newArray并在减去和添加值之间交替,然后产生最终数字。

您可以使用Array.prototype.reduce

执行此操作

&#13;
&#13;
// Your code, unchanged
var arrLimit = 39; 
var newArray = [];

for(i = 1; i <= arrLimit; i += 2) {     
    newArray.push(4/i);
}

// reduce the array to the final result
// (2*(-i%2)+1) alternates between `-1` and `1`.
var result = newArray.reduce( (prev,curr,i) => prev + (2*(-i%2)+1)*curr );
console.log( result );
&#13;
&#13;
&#13;

答案 4 :(得分:0)

如何首先取消阵列并且能够&#34;计算&#34;拥有你喜欢的任意数量的pi。

&#13;
&#13;
let pi = 0,
    terms = 100;

for (var i = 0; i < terms; i++){
  pi += 4/(2*i + 1) * ( i % 2 == 0 ? 1 : -1)
}

console.log(pi);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

您可以在构建时查看newArray的长度,并将该值乘以-1或+1

&#13;
&#13;
var arrLimit = 39; 
var newArray = [];

for(i = 1; i <= arrLimit; i += 2) {   
  newArray.push(4 / i * (newArray.length % 2 ? 1 : -1));
}

console.log(newArray);
&#13;
&#13;
&#13;