您将如何在 Javascript/jQuery 中迭代以下系列:
1, -2, 3, -4, 5, -6, 7, -8, ...
这是我如何做到的:
n = 1
while (...) {
n = ((n % 2 == 0) ? 1 : -1) * (Math.abs(n) + 1);
}
有没有更简单的方法?
您将如何在 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);
这个比较简单
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);
怎么样:
var n = 1;
while(...)
n = n < 0 ? -(n - 1) : -(n + 1);
这看起来是对的,没有比这更简单的了。虽然你可以使用n < 0
如果你开始n = 1
而不是n % 2 == 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)
How about some Bit Manipulation -
n = 1;
while(...)
{
if(n&1)
cout<<n<<",";
else
cout<<~n+1<<",";
}
Nothing beats the bits !!
for (var n = 1; Math.abs(n) < 10; (n ^= -1) > 0 && (n += 2))
console.log (n);
怎么样:
while (...)
{
if (n * -1 > 0) { n -= 1; }
else { n += 1; }
n *= -1;
}
似乎是最简单的方法。