【问题标题】:javaScript placeholder in array for pattern match用于模式匹配的数组中的 javaScript 占位符
【发布时间】:2018-02-02 01:56:57
【问题描述】:

我有一个这样的 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!")
}

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

我是js新手,有谁知道怎么做?

【问题讨论】:

  • 下划线_的内容是什么?
  • 数组,{status:"stay",points:[1,2,3,4,5]}
  • 你有一个数组,你需要迭代它以获得想要的status。但是如果发现了你会怎么做呢?

标签: javascript switch-statement pattern-matching placeholder


【解决方案1】:

如果我理解您要正确执行的操作,您可以尝试将数组缩减为字符串,然后在 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 */
}

【讨论】:

  • 完美!好像我们不能在js中使用一些占位符语法?
  • 你也可以像这样创建actionStringactionString = data.map((d) => d.status).join(' ')
  • @Yang 不幸的是没有。也许您可以尝试研究像 lodash 这样的函数库。那里可能有一些东西,但最终它会是一种解决方法,因为模式匹配不是 js 的原生特性。
  • @NathanP。确实如此,那肯定会更简洁。出于某种原因,我不确定地图是否在浏览器中得到广泛支持,因为我只在节点中使用过它
  • @MichaelHorn 感谢十亿,我在将 Scala 代码转换为 js 代码时提出了这个问题。
【解决方案2】:

试试

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

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

【讨论】:

  • 谢谢,data 是一个包含很多对象的数组,例如 {status:"stay",points:[1,2,3,4,5]},我需要匹配前三个对象的状态,可能是 stay&move&stay 或 move&stay&move 或其他。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多