Javascript:从存储在localStorage中的数组中删除对象?
我在localStorage中存储了一个数组,如下所示:Javascript:从存储在localStorage中的数组中删除对象?,javascript,arrays,local-storage,Javascript,Arrays,Local Storage,我在localStorage中存储了一个数组,如下所示: [ { "location": "westcliff, uk", "stopover": true }, { "location": "westcliff, uk", "stopover": true }, { "location": "southend, uk", "stopover": true }, { "location": "Leigh-on-s
[
{
"location": "westcliff, uk",
"stopover": true
},
{
"location": "westcliff, uk",
"stopover": true
},
{
"location": "southend, uk",
"stopover": true
},
{
"location": "Leigh-on-sea, uk",
"stopover": true
}
]
$(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);
}):
我有一个按钮,当我点击它时,它将在该数组中查找localion:
,它将从数组中删除该对象,然后再次存储在localstorage中
按钮代码如下所示:
[
{
"location": "westcliff, uk",
"stopover": true
},
{
"location": "westcliff, uk",
"stopover": true
},
{
"location": "southend, uk",
"stopover": true
},
{
"location": "Leigh-on-sea, uk",
"stopover": true
}
]
$(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);
}):
这一切都很好
我遇到的问题是,当单击按钮时,它将删除英国westcliff的每个“”对象
我需要做的是每次单击仅删除1个对象强>
有人能就这个问题提出建议吗
提前谢谢
编辑:
我尝试了此操作,但未从阵列中删除任何内容:
$(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);
}):
$(document).on('click',“.cart del”,function(){
var retrievedObject2=localStorage.getItem('waypoints');
var parsedObject2=JSON.parse(retrievedObject2);
for(var i=0;i
您可以使用find方法而不是filter方法
parsedObject2.find(function(x,e){
if(x.location == "westcliff, uk")
{
return x.splice(e,1)
}
});
这是因为您使用的是过滤器
,无法提前退出,因此它可能不是适合此用例的工具。相反,您可以只使用常规循环。这里有一个例子
var a=[
{文本:“foo”,n:1},
{文本:“foo”,n:2}
];
对于(变量i=0;i 控制台日志(a)代码>不要使用过滤器。编写一个循环,删除它找到的第一个匹配元素,然后跳出循环。将数组存储在localStorage中与此问题完全无关。我认为该代码将执行与OP的代码相同的操作,它将删除所有实例。查看find,如果您不返回true,它将对数组中的所有元素执行。是的,这是有效的,因为您在fiddle中使用了return
splice
的truthy返回值。但是在你答案中的代码中,你没有返回;它只删除{text:“foo”,n:1}。。所以它不适用于{text:“foo”,n:2}或{text:“foo”,n:3}?这不是你说的你想要的吗?是否仅删除与条件匹配的第一个元素?否。我说,我需要做的是每次点击只删除1个对象!示例:单击一次并删除1,再次单击并删除另一个,等等…很抱歉造成混淆。如果您查看我自己的数组,我的数组中甚至没有n:1。你只是把它放在你的例子里。