Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 表达式模式匹配_Javascript_Pattern Matching - Fatal编程技术网

Javascript 表达式模式匹配

Javascript 表达式模式匹配,javascript,pattern-matching,Javascript,Pattern Matching,我有一个类似的问题,除了Javascript而不是C 基本上,我希望能够对表达式进行模式匹配,而不是使用一长串if语句,如下所示: var person.annoyingAction = match([person.gender, person.ageGroup], [male, child], breakingStuff, [male, teenager], drivingRecklessly, [male, adult], beingLazyAfterCo

我有一个类似的问题,除了Javascript而不是C

基本上,我希望能够对表达式进行模式匹配,而不是使用一长串
if
语句,如下所示:

var person.annoyingAction = match([person.gender, person.ageGroup],
      [male, child], breakingStuff,
      [male, teenager], drivingRecklessly,
      [male, adult], beingLazyAfterComingHomeFromWork
      [female, child], screechingInAnUnbelievablyHighPitchedVoice,
      [female, teenager], knowingEverything,
      [female, adult], askingPeopleIfTheyThinkIAmTooFat
      [_, baby], cryingEveryTwoHoursAtNight,
      [_,_], beingHuman);

有人知道如何在Javascript中实现类似的功能吗?

我不知道现有的干净解决方案,但这里有一个与您的示例相匹配的简单实现:

var match = function(target) {
  for (i = 1; i < arguments.length; i += 2) {
    if (target[0] == arguments[i][0] && target[1] == arguments[i][1]) {
      return arguments[i + 1];
    }
  }
}
在JavaScript中,您无法直接比较数组(
[1,2]!=[1,2]
),因此需要单独比较元素

var result = match(["Yellow", "Food"],
  ["Red", "Food"], "Apple",
  ["Green", "Plant"], "Grass",
  ["Yellow", "Thing"], "Schoolbus",
  ["Yellow", "Food"], "Banana",
  ["Yellow", "Foot"], "Bad"
)

alert(result) # displays "Banana"