用于模式匹配的数组中的javaScript占位符

时间:2017-08-24 09:00:41

标签: javascript switch-statement pattern-matching placeholder

我有一个像这样的js数组:

let data = [{status:"stay",points:[1,2,3,4,5]}, {status:"move",points:[1,2,3,4,5]},{status:"stay",points:[1,2,3,4,5]}]

我想做一些模式匹配,这是我的代码:

switch (data){
    case [{status:"move",_},{status:"stay",_},{status:"move",_}]:
        console.log("successfully!")
}

而且我不关心点数组,但在js中占位符" _"不存在,实际上我知道其他方法可以做到这一点,但如果我们只使用switch-case,它可以解决吗?

我是js的新手,anynoe知道怎么做吗?

2 个答案:

答案 0 :(得分:2)

如果我理解您正在尝试正确执行的操作,则可以尝试将数组减少为字符串,然后在switch语句中使用该字符串。像这样:

var actionString = ""

data.forEach(function(datum) {
    actionString += datum.status + ' ';
});

// Remove extra space at the end
actionString.trim();

console.log(actionString); // "move stay move"

然后你的switch语句是:

switch(actionString) {
    case "move stay move":
        console.log('success!');
        break;
    case "stay move stay":
        console.log('failure?');
        break;
    /* etc */
}

答案 1 :(得分:1)

尝试

switch (data.status){
    case "stay":
    case "move":
        console.log("successfully!")
        break;
}

文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch