我想从数组中生成 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 = '#';
}
您可以在
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');
}
}