在HTML

时间:2017-01-17 07:00:58

标签: javascript arrays dictionary

所以我在第一次真正使用地图时遇到了一个问题,我希望有人会如此善良以至于有所了解。基本上我所拥有的是一个表,我试图传递值,并设置一个变量映射,以便使用data- *属性通过onclick事件传递信息。但是,我还需要自动传递一些来自几个if else语句的值。以下是我到目前为止的情况:

地图本身:

var skills = [
["MATH", math],                             //0
["BIOLOGY", bio],                           //1
["MECHANICS", mech],                        //2
["ELECTRONICS", elect],                     //3
["STEALTH", roll(4,40)],                    //4
["NEGOTIATION", roll(2,20)],                //5
["HORSEMANSHIP", horse],                    //6
["MOTORCYCLE", cycle],                      //7
["MARINE_BIO", marBio],                     //8
["BOTANY", botany],                         //9
["COMPUTERS", comp],                        //10
etc...

var advSkills = [
["FORENSICS", foren],                       //0
["TOXICOLOGY", toxic],                      //1
["STRUCTURAL_ENGINEERING", strEng],         //2
["ENCRYPTION", encrypt],                    //3
["OFF_HAND", roll(3,30)],                   //4
["BURST_CONTROL", roll(3,30)],              //5
["FREIGHT_TRUCKS", freight],                //6
["CONSTRUCTION_VEHICLES", conVeh],          //7
["PHARMACOLOGY", pharma],                   //8
["MICRO_BIOLOGY", micBio],                  //9
["PROGRAMMING", program],                   //10
etc...

var skillMap = new Map(skills);
var advSkillMap = new Map(advSkills);

这些值的目标区域如下所示:

<tr>
  <td><input type="text"  id="skill1" value="" readonly /></td>
  <td><input type="text"  id="skillRate1" value="" readonly /></td>
  <td><input type="text"  id="skill2" value="" readonly /></td>
  <td><input type="text"  id="skillRate2" value="" readonly /></td>
  <td><input type="text"  id="skill3" value="" readonly /></td>
  <td><input type="text"  id="skillRate3" value="" readonly /></td>
  <td><input type="text"  id="skill4" value="" readonly /></td>
  <td><input type="text"  id="skillRate4" value="" readonly /></td>
</tr>

if else是这样设置的:

function background(){
    var background = roll(1,100);
//DOCTOR
    if (background <= 5){

    getSkill(skillMap.get([36]));
    getSkill(["BIOLOGY"]);
    getSkill(["FIRST_AID"]);
    getAdvSkill(["DOCTOR"]);
    //botany && holis || bio && pharma
        return "Doctor";

//CHEMIST
    } else if (background >= 6 && background <= 8){
    getSkill(skillMap.get([36]));
    getSkill(["MATH"]);
    getSkill(["CHEMISTRY"]);
    //botany && holis || bio && toxic
        return "Chemist";

并且实际的getSkill函数在这里:

var n = 1;
var an = 1;
function getSkill(skillMap(index)){
  do {
    document.getElementById("skill" + n).setAttribute("value", skillMap.get([0]));
    document.getElementById("skillRate" + n).setAttribute("value", skillMap.get([1]);
    n ++;
    break;
  } while (n < 17);
}

所以我的问题是我似乎无法传递map项的索引以便检索二级索引,如下面的代码所示:

getSkill(skillMap.get([36]));

我在这里缺少什么?起初我以为这只是一个语法协议,所以我摆脱了括号,只用括号飞行,但似乎无法工作

1 个答案:

答案 0 :(得分:0)

首先,skillMap就是这样的。

{
'MATH': math,
'BIOLOGY': bio,
...
}

您可以按键获取值skillMap['MATH'] -> math

或者您可以通过Array.from( skillMap.keys() ) -> ['MATH', 'BIOLOGY', ...]获取密钥数组。 然后您可以通过键索引访问值。 skillMap[Array.from(skillMap.keys())[0]] -> math

但不是skillMap.get([36])