2016-08-23 3 views
0

My Array wie folgt aussieht: "MODE: ID: A: B"Jquery entfernen Eintrag aus dem Array basierend auf teilweise Übereinstimmung

["add:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0", "add:4875125862:1523:NE"] 

Wenn ein Benutzer eine Zeile aus einer Tabelle löscht ein del Eintrag hinzugefügt werden das Array.

Wenn der Benutzer der Tabelle einen neuen Eintrag hinzugefügt hat, wird dem Array ein Eintrag add hinzugefügt.

Wenn der Benutzer einen Eintrag bearbeitet, wird dem Array ein Eintrag edit hinzugefügt.

Das Problem, das ich habe, wenn der Benutzer löscht hinzugefügt und anschließend die gleiche Zeile, ich mit zwei Einträgen am Ende:

["add:123456789:0:0", "del:123456789:0:0"] 

Wie ich die del das Add bearbeiten überschrieben bekommen können (und/oder) Eintrag passend zur ID?

Ich habe versucht:

rows = rows.map(function(value) { 
    if(value.indexOf(id) > -1) { 
     return false; 
    } 

    return value; 
    }); 

aber das ersetzt nur den Eintrag mit ‚falsch‘ es nicht gelöscht wird.

Irgendeine Idee, wie ich das tun kann?

Dank

+0

Verwendung mit '.filter()' 'nicht .map()' –

+0

@ArunPJohny würde das nicht alle Instanzen des Elements entfernen? – Ted

Antwort

1

jQuery.map funktioniert wie erwartet. undefined oder null Rückgabewerte werden nicht zugeordnet.

rows = $.map(rows, function(value) { 
    if(value.indexOf(id) > -1) { 
     return undefined; 
    } 

    return value; 
    }); 

Karte Rückruffunktion jQuery kann zurückgeben:

  • Übersetzte Wert, der
  • null oder undefiniert auf die resultierende Array abgebildet wird,
  • ein Array von Werten um das Element zu entfernen, , die in die vollständige Anordnung abgeflacht werden
+0

mit dieser Rückkehr false in das Array '[false, del: 1471958467387: 0: 0"] ' – Tom

+0

Ja, ich hatte einen Fehler.'Return undefined' nicht' false' – Joe

+0

Das scheint zu funktionieren und folgt einem ähnlichen Ansatz wie ich es versucht habe .. so verstehe ich es :) – Tom

0

Sie könnten das Array iterieren und spaltete ein Element für die Überprüfung und Aktualisierung und das Element für eine assingment an das Element wieder zusammenzusetzen.

Dieser Vorschlag erwartet nur einen Artikel mit der angegebenen id.

var data = ["add:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0", "add:4875125862:1523:NE"], 
 
    id = '123456789'; 
 

 
data.some(function (a, i, aa) { 
 
    var item = a.split(':') 
 
    if (item[1] === id) { 
 
     item[0] = "del"; 
 
     aa[i] = item.join(':'); 
 
     return true; 
 
    } 
 
}); 
 

 
console.log(data);

0

Sie können nur eine filt hinzufügen er am Ende: obwohl

rows = rows.map(function(value) { 
    if(value.indexOf(id) > -1) { 
     return false; 
    } 
    return value; 
    }) 
.filter(function(item) {return item;}); 
0

Versuchen Sie, diese

rows = $.map(rows, function(value){ 
    if(value.indexOf(id) > -1){ 
     return 'del:' + id; 
    } 
} 
Verwandte Themen