使用三元表达式在两个字符串值之间切换的正确方法

时间:2017-04-08 19:14:21

标签: javascript jquery typescript

我想要一个在两个值之间切换的字符串。我已宣布为三元

public position: string = (this.position == "positionOne" ? "positionOne" : "positionTwo");

我想要一个直接从" positionOne"切换的功能。 to" positionTwo" (字符串的值)。像`

这样的东西
togglePosition = function() 
     {this.position = !this.position}

然后它将相反的字符串作为值。或者如果宣布为三元,我还需要进行完整的评估?然后看if (position = "positionOne") ...做任何事情......或else颠倒。  你知道我的意思? :)你建议我使用什么解决方案?

从现在开始非常感谢

5 个答案:

答案 0 :(得分:5)

您可以使用对象和键作为所需值。

function toggle(v) {
    return { positionOne: 'positionTwo', positionTwo: 'positionOne' }[v];
}
 
var position = 'positionOne';
console.log(position);
position = toggle(position);
console.log(position);
position = toggle(position);
console.log(position);

答案 1 :(得分:2)

作为替代方案,你可以使用它(如果值不匹配"中途"):



function toggle(pos) {
    return 'positionOnepositionTwo'.replace(pos, '');
}

pos = 'positionOne';
console.log(pos = toggle(pos));
console.log(pos = toggle(pos));
console.log(pos = toggle(pos));




替代find



function toggle(pos) {
    return ['positionOne','positionTwo'].find(x => x !== pos);
}

pos = 'positionOne';
console.log(pos = toggle(pos));
console.log(pos = toggle(pos));
console.log(pos = toggle(pos));




答案 2 :(得分:1)

在布尔变量中存储要显示的字符串的状态可能更有意义,您可以轻松切换,然后编写一个基于布尔变量返回相应字符串的方法。

答案 3 :(得分:1)

当然,您可以使用Array.find做同样的事情,Nina提到:



var log = console.log;
function toggle(v) {
   return ['positionOne','positionTwo'].find(s=>s!=v);
}
 
var position = 'positionOne';
log( position );

position = toggle(position);
log( position );

position = toggle(position);
log( position );




答案 4 :(得分:1)

我认为正确的方法'将取决于人和项目。对于简单的问题,我更喜欢@Nina Scholz的三元方式或答案。

您也可以使用ES6解构:

({ [position]: position } = { positionOne: "positionTwo", positionTwo: "positionOne" });



<!DOCTYPE html>
<html>

<body>

  <button onclick="myFunction()">Click me</button>

  <p id="demo"></p>

  <script>
    var position = "positionOne";

    function myFunction() {
      ({
        [position]: position
      } = {
        positionOne: "positionTwo",
        positionTwo: "positionOne"
      });
      document.getElementById("demo").innerHTML = position;
    }
  </script>

</body>

</html>
&#13;
&#13;
&#13;

使用解构的一个有趣的替代方法,虽然可能不是这个用例的最佳选择,但可以通过切换两个变量的值来获得:

var positionA = "positionOne";
var positionB = "positionTwo";
[positionA, positionB] = [positionB, positionA];

&#13;
&#13;
<!DOCTYPE html>
<html>

<body>

  <button onclick="myFunction()">Click me</button>

  <p id="demo"></p>

  <script>
    var positionA = "positionOne";
    var positionB = "positionTwo";

    function myFunction() {
      [positionA, positionB] = [positionB, positionA];
      document.getElementById("demo").innerHTML = positionA;
    }
  </script>

</body>

</html>
&#13;
&#13;
&#13;

或者只使用一个对象:

var position = {a: 'positionOne', b: 'positionTwo'};    
[position.a, position.b] = [position.b, position.a];

此解决方案的优点是可以在多个值之间进行更改,而不仅仅是两个(但为此您应该使用the solution mentioned earlier in its extensive form)。

&#13;
&#13;
<!DOCTYPE html>
<html>

<body>

  <button onclick="myFunction()">Click me</button>

  <p id="demo"></p>

  <script>
    var positionA = "positionOne";
    var positionB = "positionTwo";
    var positionC = "positionThree";
    var positionD = "positionFour";

    function myFunction() {
      [positionA, positionB, positionC, positionD] = [positionB, positionC, positionD, positionA];
      document.getElementById("demo").innerHTML = positionA;
    }
  </script>

</body>

</html>
&#13;
&#13;
&#13;