2017-06-15 5 views
0

Ich habe ein Array in localstorage gespeichert, die wie folgt aussieht:Javascript: Entfernen von Objekt aus Array in LocalStorage gespeichert?

[ 
    { 
    "location": "westcliff, uk", 
    "stopover": true 
    }, 
    { 
    "location": "westcliff, uk", 
    "stopover": true 
    }, 
    { 
    "location": "southend, uk", 
    "stopover": true 
    }, 
    { 
    "location": "Leigh-on-sea, uk", 
    "stopover": true 
    } 
] 

Ich habe eine Schaltfläche, dass, wenn ich auf klicken, wird es für die localtion: in diesem Array aussehen wird, und es wird das Objekt aus dem Array löschen und speichert dann wieder im lokalen Speicher.

Der Button-Code sieht wie folgt aus:

$(document).on('click', ".cart-del", function() { 
    var retrievedObject2 = localStorage.getItem('waypoints'); 
    var parsedObject2 = JSON.parse(retrievedObject2); 
    var result2 = parsedObject2.filter(function(x){return x.location !== "westcliff, uk"; }); 
    var setLoc2 = JSON.stringify(result2); 
    localStorage.setItem('waypoints', setLoc2); 
}): 

Das alles funktioniert gut.

Das Problem, das ich habe, ist, dass wenn die Schaltfläche geklickt wird, wird es alle "westcliff, uk" -Objekt entfernen.

Was ich tun muss, ist nur 1 Objekt pro Klick zu entfernen!

Könnte jemand bitte Beratung zu diesem Thema?

Vielen Dank im Voraus.

EDIT:

Ich habe versucht, dies und das entbindet nicht alles aus dem Array:

$(document).on('click', ".cart-del", function() { 

    var retrievedObject2 = localStorage.getItem('waypoints'); 
    var parsedObject2 = JSON.parse(retrievedObject2); 

    for(var i = 0; i < parsedObject2.length; i++){ 
    if(parsedObject2[i].text == "westcliff, uk"){ 
    parsedObject2.splice(i, 1); 
    break; 
    } 
    } 



    var result2 = parsedObject2;  

    var setLoc2 = JSON.stringify(result2); 
    localStorage.setItem('waypoints', setLoc2); 
    }): 
+3

Sie 'nicht .filter' verwenden. Schreiben Sie eine Schleife, die das erste gefundene übereinstimmende Element entfernt und dann aus der Schleife ausbricht. – Barmar

+0

Das Speichern des Arrays in localStorage ist für diese Frage völlig irrelevant. – Barmar

Antwort

1

Es ist Da Sie filter verwenden, gibt es keine Möglichkeit, früher zu beenden, so dass es möglicherweise kein geeignetes Tool für diesen Anwendungsfall ist. Stattdessen können Sie einfach eine normale Schleife verwenden. Hier ist ein Beispiel.

var a = [ 
 
    {text : "foo", n : 1 }, 
 
    {text : "foo", n : 2 } 
 
]; 
 
for(var i = 0; i < a.length; i++){ 
 
    if(a[i].text == "foo"){ 
 
    a.splice(i, 1); 
 
    break; 
 
    } 
 
} 
 
console.log(a);

Oder eine sauberere Ansatz findIndex:

var a = [ 
 
    {text : "foo", n : 1 }, 
 
    {text : "foo", n : 2 } 
 
]; 
 

 
a.findIndex((obj, i) => { 
 
    if(obj.text === "foo"){ 
 
    a.splice(i,1); 
 
    return true; 
 
    } 
 
}); 
 

 
console.log(a);

+0

Sie verwenden a.splice (i, 1); das entfernt nur {text: "foo", n: 1} .. also funktioniert es nicht für {text: "foo", n: 2} oder {text: "foo", n: 3}? –

+0

Ist das nicht das, was du gesagt hast? Um nur das erste Element zu entfernen, das der Bedingung entspricht? –

+0

Nein. Ich sagte: Was ich tun muss, ist nur 1 Objekt pro Klick zu entfernen! Beispiel: Klicken Sie einmal und entfernen Sie 1, klicken Sie erneut und entfernen Sie einen anderen usw. etc ... –

0

Sie Methode anstelle der Filtermethode finden können

parsedObject2.find(function(x,e){ 
    if(x.location == "westcliff, uk") 
    { 
     return x.splice(e,1) 
    } 
}); 
+0

Ich denke, dass Code das gleiche wie OP Code tut, wird es alle Instanzen entfernen. Sehen Sie sich [docs] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find?v=example#Description) an, um zu finden, wenn Sie nicht "true" zurückgeben Es wird für alle Elemente im Array ausgeführt. –

+0

Nein du falsch denken https://jsfiddle.net/qym3027s/ schauen Sie dies –

+0

Ja, das funktioniert, weil Sie den Truthy Return-Wert von 'Splice' in der Geige zurückgegeben. Aber in dem Code in deiner Antwort kommst du nicht zurück. –

Verwandte Themen