将对象存储在数组中

时间:2021-02-17 17:35:44

标签: javascript arrays object

试图制作一个购买电影票的网站并将其存储在一个数组中并在屏幕上显示它们,但我不明白为什么它没有制作一个数组。当我尝试订购第二个订单时,它会覆盖旧对象。

JS代码:

function test() {
  const billett = [];

  let valgtFilm = document.getElementById("film").value;
  let antall = document.getElementById("antall").value;
  let fornavn = document.getElementById("forNavn").value;
  let etternavn = document.getElementById("etterNavn").value;
  let telefon = document.getElementById("telefornr").value;
  let epost = document.getElementById("epost").value;
  let tall = Number(antall);
  let telefonnr = Number(telefon);

  let ut = "<table><tr>" +
    "<th>Film</th><th>antall</th><th>Navn</th><th>Etternavn</th><th>Telefonnr</th><th>Epost</th>" +
    "</tr>";


  if (valgtFilm === "non") {
    alert("Feil1");
  }
  if (tall <= 0) {
    alert("Feil2");
  }
  if (fornavn === "") {
    alert("Feil3");
  }
  if (etternavn === "") {
    alert("Feil4");
  }
  if (isNaN(telefonnr) || telefon === "") {
    alert("Feil5");
  }
  if (epost === "") {
    alert("Feil6");
  } else {
    const nyBillett = {
      film: valgtFilm,
      antall: tall,
      navn: fornavn,
      etternavn: etternavn,
      tlf: telefonnr,
      epost: epost,
    }
    billett.push(nyBillett);
    for (let b of billett) {

      ut += "<tr>";
      ut += "<td>" + b.film + "</td><td>" + b.antall + "</td><td>" + b.navn + "</td><td>" + b.etternavn + "</td><td>" + b.tlf + "</td><td>" + b.epost + "</td>";
      ut += "</tr></br>";

      document.getElementById("feil").innerHTML = ut;

      //fjerner verdier
      document.getElementById("film").value = 'Velg film her';
      document.getElementById("antall").value = "";
      document.getElementById("forNavn").value = "";
      document.getElementById("etterNavn").value = "";
      document.getElementById("telefornr").value = "";
      document.getElementById("epost").value = "";
    }
  }
}

1 个答案:

答案 0 :(得分:2)

每次调用函数 test 时都会创建一个新数组。新数组不包含推送到旧数组的对象。

在函数外声明数组。

let billett = [];

function test() {
  ....

  billett.push(nyBillett);

  ....
}