如何连接 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 不允许这样连接,我该如何实现?
尝试这种用于逻辑部分(增量和条件)函数的方法。
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 的,如果不是他的,我的解决方案。
我正在为分页目的编写 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 不允许这样连接,我该如何实现?
尝试这种用于逻辑部分(增量和条件)函数的方法。
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 的,如果不是他的,我的解决方案。