【问题标题】:Angular typescript switch case by some values一些值的角度打字稿开关案例
【发布时间】:2022-06-14 05:28:30
【问题描述】:

我只是尝试通过两个值进行切换。

switch ({'a': val_a,'b': val_b}){
  case ({'x','y'}):
    "some code here"
    break;
}

这不起作用... 有什么帮助吗? 谢谢!

【问题讨论】:

  • ...在您看来,上面的表达式应该发生什么样的相等比较,我想知道(又名isEqual("{'a': val_a,'b': val_b}", {'x','y'})...? ://
  • 首先是一个 JSON 对象,而不是 JavaScript 对象。 JavaScript 对象没有字符串作为键。 { a: val_a, b: val_b } 是一个 JavaScript 对象。 { 'a': val_a, 'b': val_b } 是一个 JSON 对象。如果它确实是带有JSON.parse(obj) 的 JSON,您要么需要解析它,要么在尝试切换案例之前弄清楚您这边发生了什么。

标签: javascript angular typescript switch-statement case


【解决方案1】:

switch 操作符只适用于原语,不能比较对象,但你可以自己创建原语,例如字符串

const compareValue = val_a + ' ' + val_b;

switch (compareValue){
  case 'x y':
    //"some code here"
    break;
}

【讨论】:

    【解决方案2】:

    case 语句中的值必须是 constantliteral 或计算结果为 constant 的表达式strong> 或 文字。你不能指望 switch 语句有对象,而下面的 case 语句有自己的对象并进行比较。

    话虽如此,您在 javascript 中有一些选项可以让您转换对象(仅用于比较目的)。我将遵循的方法是这样的

    let obj = {'a': 'x','b': 'y'};
    let obj1={a:'x',b:'y'};
    switch(Object.values(obj).join(','))
    {
     case Object.values(obj1).join(','):
       console.log('evaluation succeeds');
     break;
    }
    

    所以我所做的是获取对象值并用逗号连接(实际上有一个字符串),并且在 case 语句中与 另一个对象 相同(以便可以进行比较)

    【讨论】:

      【解决方案3】:
      switch(true) {
        case obj1.a == obj2.a && obj1.b == obj2.b:
          console.log('true');
          break;
      }
      

      【讨论】:

        【解决方案4】:

        一旦您确定您是否有一个真正的 JavaScript 对象,或者您是否必须首先将 JSON 解析为一个对象,您的案例需要包含整个对象才能工作。

        看起来像这样:

        const obj = { a: "value_a", b: "value_b" };
        
        switch (obj) {
          case { a: "value_a", b: "value_b" }:
            // insert your code here
            break;
          default:
          case { a: "value_a2", b: "value_b3" }:
            // insert your code here
            break;
        }
        

        只要您的案例与整个对象匹配,它就可以正常工作。或者您可以制作一个来匹配单个属性,在这种情况下看起来像:

        switch (obj.a) {
          case "value_a":
            // insert your code here
            break;
          default:
          case "value_a2":
            // insert your code here
            break;
        }
        

        【讨论】:

          猜你喜欢
          • 2018-11-11
          • 2013-08-16
          • 2017-08-06
          • 1970-01-01
          • 2016-02-03
          • 2016-09-07
          • 1970-01-01
          • 2015-06-23
          • 2015-09-29
          相关资源
          最近更新 更多