Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:从存储在localStorage中的数组中删除对象?_Javascript_Arrays_Local Storage - Fatal编程技术网

Javascript:从存储在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

我在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);
}):
我有一个按钮,当我点击它时,它将在该数组中查找
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。你只是把它放在你的例子里。