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

时间:2018-03-18 18:58:53

标签: javascript arrays object

我有一个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();
        }     

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

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

如果你看看block-2:line-4,我可以手动输入一个对象的名字并找到合适的索引,但同样,这是硬编码的。我尝试使用" name",但它的字符串化并且没有注册,因此我在索引上得到-1。

我如何使用"名称"我的函数中的参数,用于在我的player.characters数组中查找对象?

注意:据我所知,在第3行:第3行以后,我有硬编码的矮人数据。在弄清楚如何在第2行设置对象之后,我可以并且将会解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以创建只搜索字符数组以获取特定名称。

使用.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];