如何在Javascript中连接运算符?

3

我正在编写 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不允许这种方式的连接,我该怎么做呢?

查看截图


你想要实现什么?你能提供一下你想要的输出样例吗? - Eddie
我已经附上了屏幕截图,并更新了问题。@Eddie - Nick Taylor
我不知道任何一种语言可以像这样进行“连接”。看起来你期望 + 的行为像 eval - Bergi
4个回答

3

看起来你正在寻找一个 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 => {
    …
});

3

尝试使用函数来处理逻辑部分(增量和条件)的方法。

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


Suren,请问你能用JavaScript来做这个吗? - Nick Taylor
1
这是Javascript :) - Suren Srapyan
我认为这是ECMA SCRIPT或者类似的东西。 - Nick Taylor
这只是 ES6 规范。 - Suren Srapyan
Suren,有一个小问题吗? - Nick Taylor
让我们在聊天中继续这个讨论 - Nick Taylor

0

这个答案是对@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的,如果还不行,就用我的解决方案。


-1

只需使用 eval(i+b+10) 替代 i+b+10


但是 i0 而不是 "i" - Bergi
一些整数 + 一些字符串会生成一个字符串。由于 b 是字符串,所以在连接后 i 也将成为一个字符串。 - Biswajit Panday
1
是的,但它生成了错误的字符串进行评估,至少在 eval(i+a) 的情况下。 - Bergi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接