我有两个字符串:“a”和“b”。如何从“a”获得“b”。而“b”中的“a”没有 if ?像:
var arr = ["a", "b"];
function reverse(str){
return arr[+!arr.indexOf(str)];
}
但是更优雅。
答案 0 :(得分:4)
许多方法都是这样做的。
var a = 'foo', b = 'bar',
arr = [a, b];
// dictionary object
var o = {};
o[a] = b;
o[b] = a;
function reverse(x) {
return o[x];
}
// equality with cast (+x or x|0)
function reverse(x) {
return arr[+(x === a)];
}
// or
function reverse(x) {
return arr[+(x === arr[0])];
}
如果您只是想在两者之间轮流,可以编写一个生成器
var reverse = (function () {
var i = 1;
return function () {
return arr[i = 1 - i];
}
}());
reverse(); // "foo"
reverse(); // "bar"
reverse(); // "foo"
答案 1 :(得分:2)
你可以做到
return arr[(str=='a')%2]
或者如果您不想硬编码'a'
return arr[(str==arr[0])%2]
或(使用相同的想法)
return arr[+(str==arr[0])]
它看起来比您的解决方案更清晰,但它比使用三元运算符更好?
答案 2 :(得分:1)
var arr = ["a", "b"];
function reverse(str){
return arr[(arr.indexOf(str) + 1) % 2];
}
答案 3 :(得分:1)
您可以使用char / ascii转换:
function reverse(c) {
return String.fromCharCode(195 - c.charCodeAt(0))
}
试试吧
alert(reverse('a'));
alert(reverse('b'));