Javascript:从存储在localStorage中的数组中删除对象?

时间:2017-06-15 16:35:04

标签: javascript arrays local-storage

我有一个存储在localStorage中的数组,如下所示:

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

我有一个按钮,当我点击它时,它将在该数组中查找localtion:,它将从数组中删除该对象,然后再次存储在localstorage中。

按钮代码如下所示:

$(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, uk"对象

我需要做的是每次点击只删除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);
    }):

2 个答案:

答案 0 :(得分:1)

这是因为您正在使用filter,因此无法提前退出,因此它可能不适合此用例。相反,你可以使用常规循环。这是一个例子。

&#13;
&#13;
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);
&#13;
&#13;
&#13;

使用findIndex的整洁方法:

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用find方法代替过滤方法

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