Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何迭代序列:1,-2,3,-4,5,-6,7,-8。。。?_Javascript_Jquery_Series - Fatal编程技术网

Javascript 如何迭代序列:1,-2,3,-4,5,-6,7,-8。。。?

Javascript 如何迭代序列:1,-2,3,-4,5,-6,7,-8。。。?,javascript,jquery,series,Javascript,Jquery,Series,如何在Javascript/jQuery中迭代以下系列: 1, -2, 3, -4, 5, -6, 7, -8, ... 我是这样做的: n = 1 while (...) { n = ((n % 2 == 0) ? 1 : -1) * (Math.abs(n) + 1); } 有更简单的方法吗?您可以保留两个变量: for (var n = 1, s = 1; ...; ++n, s = -s) alert(n * s); 那么: while (...) { if (

如何在Javascript/jQuery中迭代以下系列:

1, -2, 3, -4, 5, -6, 7, -8, ...
我是这样做的:

n = 1
while (...) {
  n = ((n % 2 == 0) ? 1 : -1) * (Math.abs(n) + 1);
}

有更简单的方法吗?

您可以保留两个变量:

for (var n = 1, s = 1; ...; ++n, s = -s)
  alert(n * s);
那么:

while (...) 
{ 
    if (n * -1 > 0) { n -= 1; }
    else { n += 1; } 

    n *= -1;
}
var n = 1;
while(...)
    n = n < 0 ? -(n - 1) : -(n + 1);

这似乎是最简单的方法。

看起来不错,但并不比这简单多少。虽然如果从
n=1
开始,您可以使用
n<0
,而不是
n%2==0
,这通常是一个较慢的操作

否则,您将需要两个变量。

这更简单

x = 1;
while (...) {
    use(x);
    x = - x - x / Math.abs(x);
}

或者更简单(如果您不需要真正“递增”变量,只需要使用值)


对于(x=1;x您始终可以使用以下方法:

for (var i = 1; i < 8; i++) {
  var isOdd = (i % 2 === 1);
  var j = (isOdd - !isOdd) * i;
}
for(变量i=1;i<8;i++){
变量isOdd=(i%2==1);
变量j=(isOdd-!isOdd)*i;
}
顺便说一句,这与JavaScript中数字的符号(三态-1、0或1)类似:

var sign = (num > 0) - (num < 0)
var符号=(num>0)-(num<0)
那么:

while (...) 
{ 
    if (n * -1 > 0) { n -= 1; }
    else { n += 1; } 

    n *= -1;
}
var n = 1;
while(...)
    n = n < 0 ? -(n - 1) : -(n + 1);
var n=1;
而(…)
n=n<0?-(n-1):-(n+1);
for(var n=1;Math.abs(n)<10;(n^=-1)>0&(n+=2))
console.log(n);

一些位操作如何-

n = 1;
while(...)
{
    if(n&1)
    cout<<n<<",";
    else
    cout<<~n+1<<",";
}
n=1;
而(…)
{
如果(n&1)

这会从
1
开始;然后
(1+1)*-1=-2
,然后
(-2+1)*-1=-1
,不是吗?你会得到
1,-2,-1
我知道,我已经解决了。如果你三天没睡,就会出现错误:P@MisterSir:注意
n*-1>0
n<0
相同,后者简单得多(以及我在回答中所说的)。@Orbling是真的,但如果您要将其用于编译语言(尽管此问题标记为JS),没关系。@MisterSir:为什么没关系?因为编译器会为您优化它?可能不是这样。这种优化也可以在解释语言中进行。@Pointy:
x/Math.abs(x)
is
sign(x)
…不清楚的部分是什么?@Pointy:好把戏…你评论其他解决方案是错误的,这样你的解决方案就会被接受;-)@Misha:这意味着用这个值做你需要做的任何事情。这很好,但更简单吗?
n = 1;
while(...)
{
    if(n&1)
    cout<<n<<",";
    else
    cout<<~n+1<<",";
}