Ich habe einige Probleme mit meiner Löschfunktion. Das erste Löschen ist kein Problem, aber wenn ich versuche, danach ein anderes zu löschen oder hinzuzufügen, funktioniert es nicht. Ich denke, es muss etw sein. mit meinem Array, aber was? Ich habe die .live-Funktion gesehen, aber es hat nicht funktioniert.

      var data = [{
          title: "40 männlich Jungfrau sucht",
          director: "Judd Apatow",
          year: 2005,
          playTime: 116,
          fsk: 14
      }, {
          title: "Pulp Ficiton",
          director: "Quentin Tarantino",
          year: 1994,
          playTime: 148,
          fsk: 16
      }, {
          title: "Inglourious Basterds",
          director: "Quentin Tarantino",
          year: 2009,
          playTime: 148,
          fsk: 16
      }];

      $('button').click(function () {
          for (var e in data) {
              if (data[e].title == $(this).attr('value')) {
                  delete data[e];
              }
          }

          drawTable(data);
      });
1
Peter 6 Dez. 2013 im 01:26

3 Antworten

Beste Antwort

Das Problem ist, dass für Ihnen einen Index gibt, nicht das eigentliche Objekt, dh:

for (i in data) console.log(i); //  0, 1, 2

Sie erhalten also das Problem, dass nach dem ersten Löschen der nächste Index nicht mehr gültig ist. Um dies zu umgehen, können Sie rückwärts iterieren:

for (var i = data.length-1 ; i>=0 ; i--) {
    if (data[i].title == $(this).attr('value')) {
        delete data[i];
    }
}
2
McGarnagle 5 Dez. 2013 im 21:29

Zuerst sollten Sie den Index des Elements festhalten, das Sie löschen möchten, die Schleife unterbrechen und dann löschen. Ich habe Split verwendet. Nicht direkt in der Schleife löschen.

Zweitens haben Sie einen Rechtschreibfehler in der Pulp-Fiktion, wenn dies derjenige ist, den Sie löschen wollten.

Dieser Code funktioniert

  <button value="Pulp Fiction">Button</button>

  var data = [{
      title: "40 männlich Jungfrau sucht",
      director: "Judd Apatow",
      year: 2005,
      playTime: 116,
      fsk: 14
  }, {
      title: "Pulp Fiction",
      director: "Quentin Tarantino",
      year: 1994,
      playTime: 148,
      fsk: 16
  }, {
      title: "Inglourious Basterds",
      director: "Quentin Tarantino",
      year: 2009,
      playTime: 148,
      fsk: 16
  }];

  $('button').click(function () {
      var indexToDelete = 4;
      for (var e in data) {

          if (data[e].title.toString() == $(this).attr('value')) {
              indexToDelete = e;
              break;
          }
      }
      data.splice(indexToDelete,1);
      console.log(data);
  });
1
krosullivan 5 Dez. 2013 im 22:10

Sie haben ein Array von Objekten und iterieren nicht mit einer for in - Schleife. Ihr delete löscht auch den gesamten Array-Index. Wenn Sie dies möchten, verwenden Sie splice. Wenn nicht, zielen Sie auf den Schlüssel:

for (var i = 0; i < data.length; i++) {
    if (data[i].title == $(this).attr('value')) {
        data.splice(i, 1); //to delete whole array chunk
        delete data[i].title; //delete field
    }
}
2
tymeJV 5 Dez. 2013 im 21:30