如何连接 javascript 中的运算符?

How to concatenate operators in javascript?

我正在为分页目的编写 next_previous() 函数,我有一个从 0 移动到给定长度的循环。我想对从 0 到 10 和从 10 到 0 的两种情况使用相同的循环。

for (var i = 0; i < 10; i++) {
}

for (var i = 10; i > 0; i--) {
}

在一个循环中使用这两种情况我正在做类似的事情但没有工作

var  i = 0; a = '', b = '';

if(somevar === true){
   i = 0 , a = '++', var b = '<';
}else{
   i = 10 , a = '--', var b = '>';
}

for (i; i +b+ 0; i+a) {
} 

现在的问题是 javascript 不允许这样连接,我该如何实现?

See screenshot

尝试这种用于逻辑部分(增量和条件)函数的方法。

ES6

let i = 0;
let a;
let b;
let count = 0;

let somevar = true;

if(somevar) {
   i = 0;
   count = 10;
   a = () => i++;
   b = () => i < count;
} else {
   i = 10;
   count = 0;
   a = () => i--;
   b = () => i > count;
}

for (; b(); a()) {
   console.log(i);
}

ES5

var i = 0;
var a;
var b;
var count = 0;

var somevar = true;

if(somevar) {
   i = 0;
   count = 10;
   a = function() { i++; };
   b = function() { return i < count; };
} else {
   i = 10;
   count = 0;
   a = function() { i--; };
   b = function() { return i > count; };
}

for (; b(); a()) {
   console.log(i);
}

您似乎在寻找 eval 解决方案,但这确实不是解决此问题的方法。而是选择功能性设计:

function forward(cb) {
    for (var i = 0; i < 10; i++) cb(i);
}
function backward(cb) {
    for (var i = 10; i > 0; i--) cb(i);
}

const loop = somevar ? forward : backward;
loop(i => {
    …
});

只需使用 eval(i+b+10) 而不是 i+b+10

这个答案是@BiswajitPanday 答案的简化版本。我本来会编辑他的答案,但我意识到这个问题发布已经一周了,所以对他的答案的编辑不会那么富有成果,因为不会通知 OP



这是一个 eval 解决方案:

function loopFoo(backwardsDirection, callback) {
  if(backwardsDirection === true) {
  var i = 10, b = '>', c = 0, a = '--';
  } else {
  var i = 0, b = '<', c = 10, a = '++'; 
  }

  for (i; eval("i" + b + c); eval("i" + a)) {
  callback(i); 
  }
}


console.log("Forwards:");
loopFoo(false, console.log);

console.log("Backwards:");
loopFoo(true, console.log);

console.log("Forwards:");
loopFoo(false, console.log);

虽然这个函数 (eval) 通常不受欢迎,但我会选择 @Bergi 的解决方案,如果不是那个,@Suren 的,如果不是他的,我的解决方案。