繁体   English   中英

如何在数组中搜索并找到对象名称?

[英]How to search through and find a object name in an array?

我有一个player对象,它也有一个充满其他对象玩家的数组,如下所示:

 //player.characters is a list of characters available to select.
 //player.CC is registered as the games 'current character' being played.

   player.characters = [nullman, dwarf, human, elf, cloud, eren, erentitan, levi, mikasa];
   player.cc = player.characters[0];

这些是我可以在选择屏幕期间切换游戏角色时使用的其他对象。 我编写了一个创建播放器选择按钮的功能。 我想将这个按钮设计为具有一些内置功能,因此不必在start.init函数上重复代码。 (在使用10行相同的代码后,我意识到我需要编写一个函数来支持所有字符,而不是每个字符)。

这是我想出的代码,它将服务于每个可选字符。

function createPlayerButton(name, classID = "selection", delay, duration) {
        var button = document.createElement("button");
        button.textContent = name;
        button.setAttribute("id", name);
        button.setAttribute("class", classID);
        chatbox.appendChild(button);
        button.style.animationDelay = delay + "s";
        button.style.animationDuration = duration + "s";

        $("#"+name+"").hover(function(){
        postPlayerImage("images/players/"+name+".jpg", "animated fadeIn avatar", "0", "1"); 
        console.log(name);
        console.log(player.characters.indexOf(cloud));
        }); 



        dom.el(""+name+"").onclick = function(){
            player.cc = player.characters[1];
            listPlayerStats(dwarf);
            postPlayerImage("images/dwarf2.jpg", "animated fadeIn avatar", "1", "2"); 
            playerSelect();
        }     

所以我这里有几件事。 第一段代码几乎在屏幕上创建了按钮。 第二个块是一个悬停动画,它将在屏幕上弹出角色的化身。 第三块是加载统计数据和必要图像的代码。

我遇到的问题是block-3:line-2。 Player.CC是我用来定义当前正在播放的角色的工具。 我使用player.characters索引在每个播放器之间切换,但是此数据是硬编码的。 我需要一个更强大的系统,它可以根据名称查找我已经拥有的对象,如CreatePlayerbutton( name )参数所示。

如果您查看第2块:第4行,我可以手动输入对象的名称并找到正确的索引,但是同样,这是硬编码的。 我尝试使用“名称”,但是它是字符串化的并且没有注册,因此我在索引上得到-1。

如何在函数中使用“名称”参数在player.characters数组中查找对象?

注意:我知道在块3:第3行及以后,我已经对矮数据进行了硬编码。 在弄清楚如何在第2行上设置对象之后,我可以并且将解决此问题。

您可以仅在字符数组中搜索特定名称来创建。

使用.find():

let character = player.characters.find(c => c.name == name);

有无:

let character;
for(c of player.character){
    if(c.name == name){
        character = c;
        break;
    }
}

如果您根本不想搜索,则可以将字符存储在一个对象中:

player.characters = {nullman: nullman, dwarf: dwarf, human: human, elf: elf, cloud: cloud, eren: eren, erentitan: erentitan, levi: levi, mikasa: mikasa};

并选择它们

let character = player.characters[name];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM