Javascript 如何从列表中创建数组

Javascript 如何从列表中创建数组,javascript,arrays,Javascript,Arrays,基本上,我制作了一个数组和一个函数,在HTML的列表中显示数组。现在我想创建一个新的数组,它由列表中选定的数组组成 我的阵列: var fighters = [ { "name": "Abdi", "HP": 100, "DMG": 20 }, { "name": "chriz", "HP": 1

基本上,我制作了一个数组和一个函数,在HTML的列表中显示数组。现在我想创建一个新的数组,它由列表中选定的数组组成

我的阵列:

var fighters = [
  {
     "name": "Abdi",
     "HP": 100,
     "DMG": 20
  },
  {
     "name": "chriz",
     "HP": 100,
     "DMG": 40
  },
  {
     "name": "Erik",
     "HP": 120,
     "DMG": 11
  }
];
由我的数组组成的两个列表

for (var fighter of fighters) listX.innerHTML += `<option value="${fighter.name}">${fighter.name}</option>` ;
for (var fighter of fighters) listY.innerHTML += `<option value="${fighter.name}">${fighter.name}</option>` ;

首先,可以将附加的选项组合到一个循环中

下面是一个工作示例。它为每个选择使用一个事件侦听器,并使用过滤器按名称搜索战斗机

let listX=document.querySelector(“.listX”);
让listY=document.querySelector(“.listY”);
设FighterX=document.querySelector(“.FighterX”);
设FighterY=document.querySelector(“.FighterY”);
让我们选择=[]
让战斗机=[{
“姓名”:“阿布迪”,
“HP”:100,
“DMG”:20
},
{
“姓名”:“克里兹”,
“HP”:100,
“DMG”:40
},
{
“姓名”:“埃里克”,
“HP”:120,
“DMG”:11
}
];
用于(战斗机中的var战斗机){
listX.innerHTML+=`${fighter.name}`;
listY.innerHTML+=`${fighter.name}`;
}
函数选择(名称){
返回战斗机。过滤器(功能(a、b){
返回(a.name.toLowerCase()==name.toLowerCase())
})[0];
}
addEventListener(“更改”,函数(){
如果选择了(this.value!=“0”=选择(this.value)
FighterX.innerHTML=此.value+“已选择”;
});
addEventListener(“change”,function()){
如果选择了(this.value!=“”[1]=选择(this.value)
FighterY.innerHTML=this.value+“已选择”;
});

我对程序的几个不同方面不是很确定,因为您似乎在调用
selected
时,末尾没有索引,我还调整了结尾的逻辑,以便在执行数学函数时将值解析为整数。让我知道这是否是你要找的

const listX=document.getElementById('listX');
const listY=document.getElementById('listY');
康斯特战斗机=[
{
姓名:“Abdi”,
惠普:100,
DMG:20
}, {
姓名:“克里斯”,
惠普:100,
DMG:40
}, {
姓名:“埃里克”,
惠普:120,
DMG:11
}
];
对于(让战斗机中的战斗机)listX.innerHTML+=`${fighter.name}`;
for(让战斗机中的战斗机)listY.innerHTML+=`${fighter.name}`;
const selected=数组(2).fill();
函数选择(){
const playerX=document.getElementById('listX').value;
document.getElementById('FighterX').innerHTML=“您选择的”+playerX;
所选[0]=战斗机。查找(战斗机=>fighter.name===playerX);
const playerY=document.getElementById('listY').value;
document.getElementById('FighterY').innerHTML=“您选择的”+playerY;
选择[1]=战士。查找(战士=>fighter.name==玩家);
}
选择();
document.addEventListener('change',e=>e.target?.matches('select')&&['listX','listY'])。包括(e.target.id)&&choose();
函数myFunction(){
const chosenPlayers=selected.map(fighter=>({…fighter}));
document.getElementById('resultX')。innerHTML='';
document.getElementById('resultY')。innerHTML='';
while(chosenPlayers[0].HP>0&&chosenPlayers[1].HP>0){
chosenPlayers[1]。HP-=chosenPlayers[0]。HP;
chosenPlayers[0]。HP-=chosenPlayers[1]。DMG;
document.getElementById('resultX').innerHTML=(parseInt(document.getElementById('resultX').innerHTML)| | 0)+chosenPlayers[0]。HP;
document.getElementById('resultY').innerHTML=(parseInt(document.getElementById('resultY').innerHTML)| | 0)+chosenPlayers[1]。HP;
}
}
列表X
列表Y

运行模拟
此阵列应该是什么样子?与我在列表中选择的战斗机及其HP和DMGStart大致相同,使用此命令可以获得所选战斗机的名称:。然后在列表中使用
filter()
。如果将每个
值设置为列表中的索引而不是战斗机的名称,则使用
map()
而不是
filter()更容易获得所选的战斗机
@code学徒为什么要在评论中给出答案?非常感谢兄弟,应该是这样,但我真的需要帮助理解从const choose到document.addEventListener('change',e=>e.target?.matches('select')&&['listX','listY'])的行。包括(e.target.id)&&choose();当然@råby,我很乐意解释你的任何具体问题!你也可以和我一起在这里聊天:
function choose() {
  var playerX = document.getElementById('listX').value;
  document.getElementById('FighterX').innerHTML = "you selected " + playerX;

  var playerY = document.getElementById('listY').value;
  document.getElementById('FighterY').innerHTML = "you selected " + playerY;
}

function myFunction() {

  while (chosen[0].HP > 0 && chosen[1].HP > 0) {
    chosen[1].HP -= chosen[0].HP;
    chosen[0].HP -= chosen.DMG;
    document.getElementById('resultX').innerHTML += chosen.HP;
    document.getElementById('resultY').innerHTML += chosen.HP;
  }
}