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

发布于 2024-11-14 05:14:29 字数 230 浏览 2 评论 0原文

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

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

这是我的做法:

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

有更简单的方法吗?

How would you iterate over the following series in Javascript/jQuery:

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

Here is how I do this:

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

Is there a simpler method ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

梦旅人picnic 2024-11-21 05:14:29

您可以保留两个变量:

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

You could keep two variables:

for (var n = 1, s = 1; ...; ++n, s = -s)
  alert(n * s);
玩世 2024-11-21 05:14:29

这更简单

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);

This is simpler

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

or

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

or the much simpler (if you don't need to really "increment" a variable but just to use the value)

for (x=1; x<n; x++)
    use((x & 1) ? x : -x);
假扮的天使 2024-11-21 05:14:29

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

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

That looks about right, not much simpler than that. Though you could use n < 0 if you are starting with n = 1 instead of n % 2 == 0 which is a slower operation generally.

Otherwise, you will need two variables.

荒人说梦 2024-11-21 05:14:29

怎么样:

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

How about:

var n = 1;
while(...)
    n = n < 0 ? -(n - 1) : -(n + 1);
回心转意 2024-11-21 05:14:29

您始终可以使用以下方法:

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)

You could always just use the following method:

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

Which is similar, by the way, to how you'd get the sign (a tri-state of -1, 0 or 1) of a number in JavaScript:

var sign = (num > 0) - (num < 0)
坚持沉默 2024-11-21 05:14:29
for (var n = 1; Math.abs(n) < 10; (n ^= -1) > 0 && (n += 2))
   console.log (n);
for (var n = 1; Math.abs(n) < 10; (n ^= -1) > 0 && (n += 2))
   console.log (n);
国产ˉ祖宗 2024-11-21 05:14:29

一些位操作怎么样?

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

没有什么比位更好的了!

How about some Bit Manipulation -

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

Nothing beats the bits !!

初见 2024-11-21 05:14:29

怎么样:

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

    n *= -1;
}

似乎是最简单的方法。

How about:

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

    n *= -1;
}

seems to be the simplest way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文