繁体   English   中英

简单的“相反”检查 Javascript 中的字符串值

[英]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")
  )
};

有没有一种更简单的方法(可能是单线)来检查ab是否相反?

* 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM