3

Javascript/jQueryの次のシリーズをどのように繰り返しますか。

1, -2, 3, -4, 5, -6, 7, -8, ...

これが私がこれを行う方法です:

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

もっと簡単な方法はありますか?

4

8 に答える 8

11

2つの変数を保持できます。

for (var n = 1, s = 1; ...; ++n, s = -s)
  alert(n * s);
于 2011-06-05T13:13:19.763 に答える
4

これはもっと簡単です

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

また

x = 1;
while (...) {
    use(x);
    x = - (x + (x > 0)*2 - 1);
}

または、はるかに単純です(変数を実際に「インクリメント」する必要はなく、値を使用するだけの場合)

for (x=1; x<n; x++)
    use((x & 1) ? x : -x);
于 2011-06-05T13:18:30.710 に答える
2

それはほぼ正しいように見えますが、それよりもそれほど単純ではありません。n < 0あなたが始めているならあなたは使うことができますが、それn = 1の代わりにn % 2 == 0一般的に遅い操作です。

それ以外の場合は、2つの変数が必要になります。

于 2011-06-05T13:14:45.067 に答える
2

どうですか:

var n = 1;
while(...)
    n = n < 0 ? -(n - 1) : -(n + 1);
于 2011-06-05T13:19:43.440 に答える
0

いつでも次の方法を使用できます。

for (var i = 1; i < 8; i++) {
  var isOdd = (i % 2 === 1);
  var j = (isOdd - !isOdd) * i;
}

ちなみに、これはJavaScriptで数値の符号(-1、0、または1のトライステート)を取得する方法と似ています。

var sign = (num > 0) - (num < 0)
于 2011-06-05T13:18:55.300 に答える
0
for (var n = 1; Math.abs(n) < 10; (n ^= -1) > 0 && (n += 2))
   console.log (n);
于 2011-06-05T13:53:26.000 に答える
0

ビット操作はどうですか-

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

ビットに勝るものはありません!!

于 2013-05-09T10:40:03.940 に答える
-1

どうですか:

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

    n *= -1;
}

最も簡単な方法のようです。

于 2011-06-05T13:13:34.833 に答える