我想要一个在两个值之间切换的字符串。我已宣布为三元
public position: string = (this.position == "positionOne" ? "positionOne" : "positionTwo");
我想要一个直接从" positionOne"切换的功能。 to" positionTwo" (字符串的值)。像`
这样的东西togglePosition = function()
{this.position = !this.position}
然后它将相反的字符串作为值。或者如果宣布为三元,我还需要进行完整的评估?然后看if (position = "positionOne")
...做任何事情......或else
颠倒。
你知道我的意思? :)你建议我使用什么解决方案?
从现在开始非常感谢
答案 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;
使用解构的一个有趣的替代方法,虽然可能不是这个用例的最佳选择,但可以通过切换两个变量的值来获得:
var positionA = "positionOne";
var positionB = "positionTwo";
[positionA, positionB] = [positionB, positionA];
<!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;
或者只使用一个对象:
var position = {a: 'positionOne', b: 'positionTwo'};
[position.a, position.b] = [position.b, position.a];
此解决方案的优点是可以在多个值之间进行更改,而不仅仅是两个(但为此您应该使用the solution mentioned earlier in its extensive form)。
<!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;