表达式匹配
问题描述:
我有一个类似于this one的问题,除了用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];
}
}
}
使用例:
var result = match(["Yellow", "Food"],
["Red", "Food"], "Apple",
["Green", "Plant"], "Grass",
["Yellow", "Thing"], "Schoolbus",
["Yellow", "Food"], "Banana",
["Yellow", "Foot"], "Bad"
)
alert(result) # displays "Banana"
在JavaScript中,你可以不直接比较数组([1, 2] != [1, 2]
),因此您需要单独比较元素。