2016-08-22 4 views
1

Ich habe ein Array ähnliche Daten enthalten, wie: [Modus: id: A: B]JQuery Array suchen und ersetzen Eintrag auf teilweise Übereinstimmung

zB:

["del:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0"] 

gibt es trotzdem kann ich überprüfen und sehen, ob es eine teilweise Übereinstimmung für die ID gibt und den Eintrag entfernen und ersetzen?

zB:

Spiel auf 1471872633890 und ersetzen die gesamte Eintrag Spiel mit edit:1471872633890:8845:NE so das Array wird:

["del:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:NW"] 

Als Nebenwirkung ... können Sie ein Array für Ajax-Posting serialisiert? Wenn nicht muss ich das sowieso überdenken!

Dank

UPDATE Ich versuche, einen vorhandenen Array-Eintrag zu aktualisieren oder einen neuen Eintrag hinzuzufügen.

Das ist, was ich habe ...

var id = $(this).closest('tr').find('input[name="id[]"]').val() 
    var A = $(this).closest('tr').find('input[name="A[]"]').val() 
    var B = $(this).closest('tr').find('input[name="A[]"]').val() 
    var res = 'edit:' + id + ':' + A + ':' + B; 

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

Wie aktualisiere ich tatsächlich die Werte im Array?

+0

Bitte versuchen Sie Lösungen, warum sie nicht funktionierten, und die erwarteten Ergebnisse. Das würde uns wirklich helfen, das Problem mit Ihrem Code herauszufinden. Vielen Dank! –

Antwort

4

Ich würde map in diesem Fall verwenden. Sie können sogar eine andere loop verwenden, aber es ist einfach in diesem Fall zu handhaben und ich mag das Verhalten. Suchen Sie einfach nach innen und geben Sie den neuen Wert zurück.

var arr = ["del:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0"]; 
 

 
arr = arr.map(function(value) { 
 
    if(value.indexOf("1471872633890") > -1) { 
 
     return "edit:1471872633890:8845:NW"; 
 
    } 
 
    
 
    return value; 
 
}); 
 

 
console.log(arr);

Oder wenn Sie so wollen, wie for Schleife:

var arr = ["del:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0"]; 
 

 
for(var i = 0; i < arr.length; i++) { 
 
    if(arr[i].indexOf("1471872633890") > -1) { 
 
     arr[i] = "edit:1471872633890:8845:NW"; 
 
    } 
 
} 
 

 
console.log(arr);

Wenn Sie jQuery verwenden ajax gibt es keine Notwendigkeit, das Array zu serialisiert. Sie können sie einfach mit der data Eigenschaft senden.

var arr = ["del:123456789:0:0", "del:99887766:0:0", "edit:1471872633890:8845:0"]; 

$.ajax({ 
    url: "foo.php", 
    method: "post", 
    data: { 
     myArray: arr 
    } 
}); 
+0

Danke dafür .. Ich versuche, Karte zu verwenden, aber ich bekomme immer ein leeres Array. Ich habe meine Frage mit einigen weiteren Details aktualisiert. – Tom

+1

Ein leeres Array? Nun, das ist mit deinem Code fast unmöglich. Bitte bearbeiten Sie Ihre Frage und fügen Sie den vollständigen Code hinzu. Da stimmt etwas anderes nicht. @Tom – eisbehr

+0

Hallo - Ich habe hier einen Codepen erstellen: 'http: // s.codepen.io/Tom_T/debug/jAoyvv' Ich weiß, was das Problem ist, aber nicht, wie es gelöst wird. Beim Start ist das Array leer. Wenn Sie ein Feld bearbeiten, wird das Array ausgefüllt. Wenn Sie erneut bearbeiten, muss das Array aktualisiert werden. Das Problem liegt daran, dass ich den Wert nicht an das Array weitergebe, wenn es nicht bearbeitet werden muss. dh ein neuer Eintrag .. Ich bin nicht sicher, wie das geht! – Tom

Verwandte Themen