![](/img/trans.png)
[英]Check if a substring is contained in a string in Javascript (The Opposite Way)
[英]Simple “opposite” check for string values in Javascript
编辑:所以,似乎没有真正“更好”的方法来做到这一点,但很多人指出 hashmap 方法可能更具可读性/可组合性。
给定以下 function:
const isOpposites = (a, b) => {
return (
(a === "SOUTH" && b === "NORTH") ||
(b === "SOUTH" && a === "NORTH") ||
(a === "EAST" && b === "WEST") ||
(a === "WEST" && b === "EAST")
)
};
有没有一种更简单的方法(可能是单线)来检查a
和b
是否相反?
* a 和 b 只有四个可能的值,它们是:“NORTH”、“SOUTH”、“EAST”和“WEST”
一种选择是让 object 将方向映射到一个数字,并让相反的方向具有相同的数字:
const directions = {
SOUTH: 1,
NORTH: 1,
EAST: 2,
WEST: 2,
};
const isOpposites = (a, b) => {
return a !== b && directions[a] === directions[b];
};
不是一个班轮,但可能更具可读性:
const opposites = {
"NORTH": "SOUTH",
"SOUTH": "NORTH",
"EAST": "WEST",
"WEST": "EAST"
}
const isOpposites = (a, b) => (opposites[a] === b)
对于这个特定问题,还有许多其他方法可以解决它,但这是您提供的最佳解决方案。 显然,空间和时间复杂度是 O(n)。 这是完美的。 你不需要任何改变;
总是可以使用模数:
const CARDINALS = [
"NORTH",
"EAST",
"SOUTH",
"WEST"
];
function isOpposites(a, b) {
return CARDINALS.indexOf(a) == (CARDINALS.indexOf(b) + 2) % 4;
}
当然,像这样的简单查找表也可以工作:
const OPPOSITES = {
NORTH: 'SOUTH',
EAST: 'WEST',
SOUTH: 'NORTH',
WEST: 'EAST'
};
function isOpposites(a, b) {
return OPPOSITES[a] === b;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.