在 switch 语句中将数组项用作整个 case

问题描述 投票:0回答:1

我想从数组中生成 switch 语句中的情况。以下是数组的生成方式:

pointObjects = [];

for (var i = 0; i < 2; i++) {
    // Generate cases.
    var url;
    var pointObject = 
        {
            case: 'Placeholder',
            url: 'google.com'
        }

pointObjects.push(pointObject);
}

因此,pointObjects[0] 返回:

{
    case: 'Placeholder'
    url: 'google.com
}

我想在 switch 语句中渲染它们,所以它的行为与下面的代码相同:

                    click: function(event) {
                        var seriesName = this.name;
                        var url;

                        // Attaches the query link to the respective slice.
                        switch (seriesName) {
                            case 'Placeholder':
                                url = 'google.com';
                                break;
                            case 'Placeholder':
                                url = 'google.com';
                                break;
                            default:
                                url = '#';
                        }

                        // Opens the query in a new tab
                        if (url !== '#') {
                            window.open(url, '_blank');
                        }
                    }

我尝试了以下代码,但它说 pointObjects 是一个意外的标识符:

                        switch (seriesName) {
                            pointObjects.forEach(obj => {
                            case obj.case:
                                url = obj.url;
                                break;
                            });
                            default:
                                url = '#';
                        }
javascript arrays switch-statement
1个回答
0
投票

您可以在

switch
语句中放入的唯一内容是
case
子句和
default
子句。其他任何内容,例如尝试调用
pointObjects.forEach
,都是非法语法。因此,您无法动态更改 switch 语句的数量。相反,您需要使用其他技术来编写代码。

例如 for 循环:

click: function(event) {
  const seriesName = this.name;
  let url = "#";
  for (const obj of pointObjects) {
    if (obj.case === seriesName) {
      url = obj.url;
      break;
    }
  }

  if (url !== '#') {
    window.open(url, '_blank');
  }
}

或者在数组上使用

.find
方法:

click: function(event) {
  const seriesName = this.name;
  const obj = pointObjects.find(obj => obj.case === seriesName); 
  const url = obj?.url ?? '#';

  if (url !== '#') {
    window.open(url, '_blank');
  }
}

如果可以选择更改

pointObjects
,您也可以将其转换为对象并通过键进行查找:

const pointObjects = {
  Placeholder: 'google.com'
}
// ...

click: function(event) {
  const url = pointObjects[this.name] ?? '#'

  if (url !== '#') {
    window.open(url, '_blank');
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.