[英]Expression Pattern Matching
我有一个与此类似的问题,除了 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 中,您无法直接比较 arrays ( [1, 2],= [1, 2]
),因此您需要单独比较元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.