将对象推送到数组也会更改以前的元素

时间:2018-11-29 17:20:32

标签: javascript arrays javascript-objects array-push

我有一个用户输入对象(“ combatant {}”,带有20多个元素),我将它们放置在类似对象(“ combatants []”)的数组中,以便可以对其进行排序并重新呈现页面的另一部分。它们都是全局变量。

我有一个简单的函数,可以根据输入字段填充对象,然后将其推入数组,该数组应将其附加到已经存在的其他对象上(这样做-对象数量每次都增加)。该功能在按下“ ADD”按钮时运行,因此每次仅推动一个对象。 (注意:“添加”按钮不会刷新输入字段或将它们清零。用户只需键入已经存在的信息即可。接下来我打算修复此位。)

但是,当我逐个对象显示数组时,每个对象都与最后一个推送的对象相同。 (因此,如果我输入4组数据,每输入一组数据后按“ ADD”,则每次运行该函数时,数组中的所有先前对象都将与当前对象相同。)

我在做什么错?以及如何解决(不使用比现在更多的花哨js)?

<script>
  var combatant = { name: "foo",
                    Lvl: 1,
                    AT: 1,
                    DB: 20,
                    team: "Blue" };
  var combatants = new Array();

  function addCombatants() {
    combatant.name = document.getElementById("combatantName").value;
    combatant.Lvl = parseInt(document.getElementById('combatantLvl').value);
    combatant.AT = parseInt(document.getElementById('combatantAT').value);
    combatant.DB = parseInt(document.getElementById('combatantDB').value);
    combatant.team = document.getElementById('team').value;
    combatants.push(combatant);
  }
</script>

我正在使用window.alert()方法在一个循环中显示每个数组对象,并且似乎可以正常工作。

编辑:我已经将对象(“战斗员{}”)设为局部变量,因为只有数组才需要是全局的。可行!

0 个答案:

没有答案