0

我有两个字符串:“a”和“b”。如何从“a”得到“b”。而没有if的“b”中的“a” ?喜欢:

var arr = ["a", "b"];

function reverse(str){
    return arr[+!arr.indexOf(str)];
}

但以更优雅的方式。

4

4 回答 4

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"
于 2013-06-13T16:43:56.497 回答
2

你可以做

return arr[(str=='a')%2]

或者如果你不想硬编码'a'

return arr[(str==arr[0])%2]

或(使用相同的想法)

return arr[+(str==arr[0])]

它看起来比您的解决方案稍微干净,但它比使用三元运算符更好吗?

于 2013-06-13T16:42:36.457 回答
1

使用模运算符

var arr = ["a", "b"];

function reverse(str){
    return arr[(arr.indexOf(str) + 1) % 2];
}
于 2013-06-13T16:43:44.160 回答
1

您可以使用 char/ascii 转换:

function reverse(c) {
   return String.fromCharCode(195 - c.charCodeAt(0))
}

试试看

    alert(reverse('a'));
    alert(reverse('b'));
于 2013-06-13T16:52:19.850 回答