如何在JavaScript中的数组上切换()?

如何在JavaScript中的数组上切换()?,javascript,arrays,switch-statement,Javascript,Arrays,Switch Statement,我有一个空数组,如下所示: var itemsWithEmptySockets = []; for(var i = 0; i < itemsWithEmptySockets.length; i++){ emptyItems.push(parts[itemsWithEmptySockets[i]]); } 可使用以下一个或多个值填充(取决于通过API获取的信息): 其中: 0 = Head 1 = Neck 2 = Shoulder 4 = Chest 5 = Waist 6 =

我有一个空数组,如下所示:

var itemsWithEmptySockets = [];
for(var i = 0; i < itemsWithEmptySockets.length; i++){
   emptyItems.push(parts[itemsWithEmptySockets[i]]);
}
可使用以下一个或多个值填充(取决于通过API获取的信息):

其中:

0 = Head
1 = Neck
2 = Shoulder
4 = Chest
5 = Waist
6 = Legs
7 = Feet
8 = Wrist
9 = Hands
14 = Back
15 = MainHand
16 = SecondaryHand
我想测试看看数组中有什么,并通过将字符串存储在数组中基本上将这些数字转换为字符串,例如,如果为0,则头部有一个空套接字,将“Head”添加到新数组中,然后我想使用该数组在DOM中将“Head”显示为字符串

为此,我尝试了switch语句,例如

switch(itemsWithEmptySockets){
case 0:
emptyItems.push("Head");
break;
但是,switch语句似乎不支持以这种方式使用数组,即通过数组
项swithemptysockets

有没有比12条if语句更有效的方法来实现这一点??e、 g

for(i=0; i < itemsWithEmptySockets.length; i++){
    if(itemsWithEmptySockets[i] == 0){
      emptyItems.push("Head");
    }
if(itemsWithEmptySockets[i] == 1){
      emptyItems.push("Neck");
    }
etc.
}
for(i=0;i

非常感谢你的帮助

我不想为此使用
开关
,我不认为;我将使用映射对象:

// In one central place
var socketMappings = {
    0: "Head",
    1: "Neck",
    2: "Shoulder",
    4: "Chest",
    5: "Waist",
    6: "Legs",
    7: "Feet",
    8: "Wrist",
    9: "Hands",
    14: "Back",
    15: "MainHand",
    16: "SecondaryHand"
};

// Where you're doing this
var emptyItems = [];
itemsWithEmptySockets.forEach(function(entry) {
    emptyItems.push(socketMappings[entry]);
});
现场示例:

//在一个中心位置
var socketMappings={
0:“头”,
1:“脖子”,
2:“肩膀”,
4:“胸部”,
5:“腰围”,
6:“腿”,
7:“英尺”,
8:“手腕”,
9:“手”,
14.“回来”,
15:“主手”,
16.“二手”
};
//你在哪里做这件事
项目SWITHEMPTYSOCKETS=[
0,
14,
5.
];
var emptyItems=[];
itemsWithEmptySockets.forEach(函数(条目){
emptyItems.push(socketMappings[entry]);
});
//显示结果
log(itemsWithEmptySockets.join(“,”);
log(emptyItems.join(“,”)

我不想为此使用
开关,我不认为;我将使用映射对象:

// In one central place
var socketMappings = {
    0: "Head",
    1: "Neck",
    2: "Shoulder",
    4: "Chest",
    5: "Waist",
    6: "Legs",
    7: "Feet",
    8: "Wrist",
    9: "Hands",
    14: "Back",
    15: "MainHand",
    16: "SecondaryHand"
};

// Where you're doing this
var emptyItems = [];
itemsWithEmptySockets.forEach(function(entry) {
    emptyItems.push(socketMappings[entry]);
});
现场示例:

//在一个中心位置
var socketMappings={
0:“头”,
1:“脖子”,
2:“肩膀”,
4:“胸部”,
5:“腰围”,
6:“腿”,
7:“英尺”,
8:“手腕”,
9:“手”,
14.“回来”,
15:“主手”,
16.“二手”
};
//你在哪里做这件事
项目SWITHEMPTYSOCKETS=[
0,
14,
5.
];
var emptyItems=[];
itemsWithEmptySockets.forEach(函数(条目){
emptyItems.push(socketMappings[entry]);
});
//显示结果
log(itemsWithEmptySockets.join(“,”);
log(emptyItems.join(“,”)

要回答标题中的问题,您不能

为您的问题提出更好的解决方案。假设不同值的值总是相同的,我会将其存储在对象中,如下所示:

var parts = {
    0: 'Head',
    1: 'Neck',
    // ...
    15: 'MainHand',
    16: 'SecondaryHand'
}
然后,当您希望基于api数据进行填充时,请执行以下操作:

var itemsWithEmptySockets = [];
for(var i = 0; i < itemsWithEmptySockets.length; i++){
   emptyItems.push(parts[itemsWithEmptySockets[i]]);
}
for(变量i=0;i

您还可以动态定义parts对象,如果该对象也是通过api检索的。

要回答标题中的问题,您不能

为您的问题提出更好的解决方案。假设不同值的值总是相同的,我会将其存储在对象中,如下所示:

var parts = {
    0: 'Head',
    1: 'Neck',
    // ...
    15: 'MainHand',
    16: 'SecondaryHand'
}
然后,当您希望基于api数据进行填充时,请执行以下操作:

var itemsWithEmptySockets = [];
for(var i = 0; i < itemsWithEmptySockets.length; i++){
   emptyItems.push(parts[itemsWithEmptySockets[i]]);
}
for(变量i=0;i

如果也通过api检索零件对象,则还可以动态定义零件对象。

另一个选项是使用带有自定义查找方法的
Array.prototype.map

功能车身部件Loookup(x){
开关(x){
案例0:返回“头”;
案例1:返回“颈部”;
案例2:返回“肩部”;
案例4:返回“胸部”;
案例5:返回“腰围”;
案例6:返回“腿”;
案例7:返回“脚”;
案例8:返回“手腕”;
案例9:返回“手”;
案例14:返回“返回”;
案例15:返回“主手”;
案例16:返回“二手货”;
默认值:返回“”;
}
}
var originalArray=[0,1,2,4,5,6,7,8,9,15,16];
var resolvedArray=originalArray.map(BodyPartLoookup);
document.getElementById('output').innerHTML=resolvedArray.join(',')

另一个选项是使用带有自定义查找方法的
Array.prototype.map

功能车身部件Loookup(x){
开关(x){
案例0:返回“头”;
案例1:返回“颈部”;
案例2:返回“肩部”;
案例4:返回“胸部”;
案例5:返回“腰围”;
案例6:返回“腿”;
案例7:返回“脚”;
案例8:返回“手腕”;
案例9:返回“手”;
案例14:返回“返回”;
案例15:返回“主手”;
案例16:返回“二手货”;
默认值:返回“”;
}
}
var originalArray=[0,1,2,4,5,6,7,8,9,15,16];
var resolvedArray=originalArray.map(BodyPartLoookup);
document.getElementById('output').innerHTML=resolvedArray.join(',')

您可以创建一个具有项目大小的数组,然后可以在不使用循环或开关的情况下对值进行索引

由于这是一个非常小的列表,索引的范围也非常小,因此创建地图似乎效率低下,但是如果您的索引范围非常大,那么创建地图将是一个明智的选择

/*将控制台输出重定向到HTML。*/document.body.innerHTML='';
console.log=function(){document.body.innerHTML+=[].slice.apply(参数).join(“”)+'\n';};
const BODY_PARTS=[‘头’、‘颈’、‘肩’、‘空’、‘胸’、‘腰’、‘腿’、‘脚’,
'手腕','手',空,空,空,空,'背','主手','二手'];
var itemsWithEmptySockets=[4,2,6,8,13,9,3,5];
var emptyItems=[];
对于(变量i=0;i

body{font-family:monospace;white-space:pre;}
您可以创建一个具有项目大小的数组,然后可以在不使用循环或开关的情况下对值进行索引

因为这是一个非常小的列表